2017-06-02 71 views
1

我想使用Azure AD B2C,但使用它有一些困難。 我有一個問題是驗證令牌的簽名。 首先,我想使用jwt.io來驗證令牌「手動」。Azure AD B2C - 令牌驗證不起作用

按照Microsoft Docs,驗證簽名應該這樣工作:

您的應用程序可以使用孩子要求在JWT頭選擇用於簽署特定的JSON文件中的公鑰令牌。然後,它可以使用正確的公鑰和指定的算法執行簽名驗證。

我的理解:從頭中抓取kid值,在jwks_uri位置下查找元數據中的關鍵字,(假設)使用「n」的值來驗證簽名。

enter image description here

但Jwt.io,jsonwebtoken.io和何塞 - 智威湯遜都說,那siganture是無效的。

我錯過了什麼?

回答

2

Jwt.io似乎只支持具有字符串密鑰的HS265和具有字符串密碼的RS256或證書

天青AD B2C使用的RS256越天然形式,其按照RFC 3447, section 3.1定義了公共密鑰由兩個部分組成:ne。 JWK包含ne,可用於生成公鑰和驗證令牌簽名。

爲了使用Jwt.io,您需要將Azure AD B2C的密鑰n + e格式轉換爲證書格式。請參閱此示例以瞭解如何執行此操作的參考:Go Language Convert Modulus exponent to X.509 certificate

+0

就是這樣!謝謝你指出我朝着正確的方向。我終於能夠將模數和指數轉換爲PEM格式[使用c#](https://stackoverflow.com/questions/28406888/c-sharp-rsa-public-key-output-not-correct/28407693#28407693)並能夠使用jwt.io和c#驗證簽名。 – martinoss

+0

會很樂意使用jwt.io,[在他們的論壇上發佈帖子](https://community.auth0.com/questions/7687/cant-verify-signature-of-jwt-from-azure-b2c) – spottedmahn