M. *_*har 5 oauth-2.0 jwt azure-active-directory openid-connect
我正在尝试使用隐式流通过 Azure Ad 保护我的 Web api (.net core 2.2)。
我使用 Azure 门户 > Azure Active Directory > 应用程序注册 > 新应用程序注册在 Azure AD 中注册了我的应用程序:
名称 = MyWebApi
应用程序类型 = Web 应用程序 / API
登录 URL = http://localhost:55000
创建此应用程序后,我打开其清单文件并将oauth2AllowImplicitFlow从false更改为true。
这就是我在 azure 门户中为应用程序注册所做的全部工作。
然后我从 chrome 浏览器手动调用以下 URL 来获取 access_token:
调用上述 url 的响应是:
当我将 MY-ACCESS-TOKEN 作为授权标头中的承载令牌传递到我的 Web API (.net core 2.2) 时,出现以下异常:
Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException:IDX10511:签名验证失败。尝试过的密钥:“Microsoft.IdentityModel.Tokens.X509SecurityKey,KeyId:N-lC0n-9DALqwhuHYnHQ63GeCXc”。
然后我尝试手动验证签名:
当我将 MY-ACCESS-TOKEN 粘贴到https://jwt.io/时,标题为:
{
  "typ": "JWT",
  "nonce": "AQABAAAAAACEfexXxjamQb3OeGQ4Gugvm6YdOT-bkA0IPllKMt06-J8If5AQ075TVCav94X_ZYcEYKaPneqdJcqYry-Z4XjX0eMN_fiJX_8wXe9D2b6eRiAA",
  "alg": "RS256",
  "x5t": "N-lC0n-9DALqwhuHYnHQ63GeCXc",
  "kid": "N-lC0n-9DALqwhuHYnHQ63GeCXc"
}
然后我访问此 URL 获取孩子的公钥:N-lC0n-9DALqwhuHYnHQ63GeCXc
https://login.microsoftonline.com/common/discovery/keys
然后,我将以下内容作为公钥粘贴到 jwt.io 上以验证令牌签名:
-----BEGIN CERTIFICATE-----
OBTAINED-PUBLIC-KEY-FROM-THE-ABOVE-URL-HERE
-----END CERTIFICATE-----
我再次收到Invalid Signature。
我去过这个线程: https: //github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/609,但我不确定为什么我的令牌标头具有随机数值,或者这是否是就我而言,这是否是一个问题。
有什么想法我在这里做错了吗?
我在我身边尝试过这个,效果很好。
请求网址:
https://login.microsoftonline.com/tenant-name/oauth2/v2.0/authorize?client_id=application_id&response_type=token&redirect_uri=https://snv2app.azurewebsites.net&scope=api://f3d966c0-517e-4e13-a5bb-9777a916b1a0/User.read openid&response_mode=fragment
当我得到access_token时,我在jwt.io中解析它并输入公钥,我得到了结果:
| 归档时间: | 
 | 
| 查看次数: | 5500 次 | 
| 最近记录: |