gpt4 book ai didi

oauth-2.0 - 无法验证从 Azure AD 获取的访问 token 签名以保护 Web API

转载 作者:行者123 更新时间:2023-12-03 20:28:42 26 4
gpt4 key购买 nike

我正在尝试使用隐式流通过 Azure Ad 保护我的 web api(.net core 2.2)。

我使用 Azure 门户 > Azure Active Directory > 应用程序注册 > 新应用程序注册在 Azure AD 中注册了我的应用程序:

名称 = MyWebApi

应用程序类型 = Web 应用程序/API

登录 URL = http://localhost:55000

创建此应用程序后,我打开其 list 文件并将 oauth2AllowImplicitFlow 从 false 更改为 true。

这就是我为 azure 门户中的应用程序注册所做的一切。

然后我从我的 chrome 浏览器手动调用以下 URL 以获取 access_token:

https://login.microsoftonline.com/MY-AD-TENANT-GUID/oauth2/v2.0/authorize?client_id=MY-REGISTERED-APP-GUID&response_type=token&redirect_uri=http%3A%2F%2Flocalhost%3A55000&scope=openid&response_mode=fragment

调用上述 url 的响应是:

http://localhost:55000/#access_token=MY-ACCESS-TOKEN&token_type=Bearer&expires_in=3600&scope=profile+openid+email+00000003-0000-0000-c000-000000000000%2fUser.Read&session_state=b2be972a-cfbc-49f1-bfc0-6c93f6c87d02

当我将 MY-ACCESS-TOKEN 作为 Authorization header 中的不记名 token 传递给我的 Web API(.net core 2.2)时,出现以下异常:

Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException:IDX10511:签名验证失败。尝试的 key :'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 获取 child 的公钥:N-lC0n-9DALqwhuHYnHQ63GeCXc

https://login.microsoftonline.com/common/discovery/keys

然后我将以下内容作为公钥粘贴到 jwt.io 以验证 token 签名:
-----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 ,但我不确定为什么我的 token header 有 nonce 值,或者这是否在我的情况下是一个问题。

任何想法我在这里做错了什么?

最佳答案

我在我这边试过这个,效果很好。

请求网址:

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中解析,输入公钥,得到了结果:

enter image description here

关于oauth-2.0 - 无法验证从 Azure AD 获取的访问 token 签名以保护 Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55247157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com