gpt4 book ai didi

asp.net-core - Okta 使用 OpenID Connect 配置中的公钥验证 JWT token

转载 作者:行者123 更新时间:2023-12-02 03:34:37 24 4
gpt4 key购买 nike

背景

我按照 Okta 的教程进行操作: https://developer.okta.com/quickstart/#/ios/dotnet/aspnetcore

实现了 Xamarin 的开源 AppAuth.iOS 组件版本,以便能够在 Xamarin.iOS 项目中使用它。 (作品)

创建了一个简单的 asp.net core Web 服务,如上面的文章所示并按照说明进行配置。

问题:

通过移动应用程序成功进行身份验证后,我收到 JWT 访问 token ,并使用此 token 调用测试 Web 服务。 Web 服务无法验证 token ,并显示以下错误消息

错误:

Signature validation failed. Unable to match keys: 'HD3v3KXvARUyg_9i26m2i8itsCY7TpA0-ajhcOsBdkM',
token: '{"alg":"RS256","typ":"JWT","kid":"HD3v3KXvARUyg_9i26m2i8itsCY7TpA0-ajhcOsBdkM"}.{"ver":1,"jti":"AT.J4uuLmOgCLslqlnUzNbjhw7dzm5KurJVJxHNIXZx-g8.zQJUh4NcHWcIBvdWVLy7fXea4cCoPxv7Avh3+z6PiGM=","iss":"https://dev-111111.oktapreview.com","aud":"https://dev-111111.oktapreview.com","sub":"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9df9eefcf0e8e4f1f2ebddacacacacacacb3fef2f0" rel="noreferrer noopener nofollow">[email protected]</a>","iat":1527861992,"exp":1527865592,"cid":"0oafa27024puCyvwi0h7","uid":"00uf9rphkt6D8gcXI0h7","scp":["offline_access","openid","profile"]}'.
at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(String token, TokenValidationParameters validationParameters)
at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateToken(String token, TokenValidationParameters validationParameters, SecurityToken& validatedToken)
at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync()

调试:

使用 https://jwt.io/ 检查 JWT token 后我找到了kid用于签署 token 的签名公钥

然后我进入我帐户的 openid-connect 配置 https://dev-111111.oktapreview.com/oauth2/default/.well-known/openid-configuration

找到 key url https://dev-111111.oktapreview.com/oauth2/default/v1/keys

那里只列出了 1 个 key ,其 kid 与 token header 中的不匹配

问题:

如果我为移动客户端和 Web 服务使用相同的 Okta 帐户/服务器,为什么会发生这种情况?这个关键不匹配从何而来?

真心希望 Okta 技术团队的某个人能够参与进来并阐明这一点,因为问题开头链接的指导演练不起作用。

谢谢,

德米特里

最佳答案

问题原来是配置问题。

在获取 token 的移动客户端中,AppAuth 组件已使用 issuer 设置为 https://dev-111111.oktapreview.com 进行初始化,而不是正确的https://dev-111111.oktapreview.com/oauth2/default

的值

这导致了困惑,因为它没有在 https://dev-111111.oktapreview.com 上发现 openid-connect 配置,而是成功了。它成功的原因是因为正如 Okta 支持人员告诉我的那样,它指向 Okta API 的授权服务器,并且出于安全目的,他们隐藏了用于 API token 的公共(public)签名 key 。这也是签名 key 不同的原因,因为我本质上是指向客户端和后端上的 2 个不同的授权服务器。

如果这个网址无法检索 openid-connect 配置,或者如果有一些关于两者之间差异的明确文档,我认为这会减少很多困惑。

另一件事是,Ok​​ta 有 2 种不同的产品,一种是基于 IT 的用于管理身份验证的产品,另一种是以 开发人员 为中心的产品。以 IT 为中心的产品不具备此功能,除非您购买名为 API 访问管理 的附加服务(如果您拥有开发者 版本) (管理网站上的深蓝色标题)默认情况下,您的帐户上可以使用此功能。

希望这对将来的人有所帮助,感谢 Okta 支持团队为我澄清了这一点。

关于asp.net-core - Okta 使用 OpenID Connect 配置中的公钥验证 JWT token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50646306/

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