gpt4 book ai didi

asp.net-core - OpenId Connect更新SPA中的access_token

转载 作者:行者123 更新时间:2023-12-04 09:44:47 25 4
gpt4 key购买 nike

尝试在由以下组件组成的Web应用程序中实现OpenId Connect


身份提供者
资源服务器
单页应用程序充当客户端。


身份提供者和资源服务器是同一应用程序。

SPA使用密码流获取access_token并将其存储到cookie中。将access_token存储到cookie中是security threads,但这是另一回事。

问题

IdP发出的access_token在30分钟后过期,SPA需要续签令牌,而无需再次询问用户凭据。



IdP返回refresh_tokenaccess_token。每当SPA从资源服务器获取401时,它将refresh_token发送到IdP并获取新的access_token

问题

refresh_token发送到SPA是bad practice


单页应用程序(通常实现隐式授予)在任何情况下都不应获得刷新令牌。这样做的原因是该信息的敏感性。您可以将其视为用户凭据,因为“刷新令牌”允许用户基本上永远保持身份验证。因此,您不能在浏览器中拥有此信息,必须将其安全地存储。


建议的解决方案


当访问令牌过期时,假定用户的SSO会话尚未过期,则可以使用静默身份验证来检索新的令牌,而无需用户交互。


我认为当IdP和资源服务器是同一应用程序时,Silent Authentication不适用于密码流。由IdP发行的access_token只是可用于对资源服务器/ IdP到期后进行授权的一条信息,客户端如何说服IdP发行新的access_token? (不发送refresh_token

找到使用refresh_token续订access_tokenangular-oauth2-oidc库。

在这种情况下,续订access_token的最佳实践/解决方案是什么?

技术细节


身份提供者-ASP.NET Core + Openiddict库。
SPA-AngularJs应用程序。

最佳答案

单页应用程序不得接收刷新令牌。在OAuth 2.0和OpenID Connect中已经建立了规则。

我在这里看到的一个不错的选择是使用Implicit Flow。这将建立从您的浏览器到Identity Provider的前台渠道会话。使用密码授予类型,您可以进行反向渠道呼叫(POST),因此您不会获得此类会话。

通常,这是一个cookie,它指向有关先前登录状态的信息(这些是身份提供商的详细信息)。流程完成后,SPA将收到access token。如您所知,它将过期。但是一旦发生这种情况,SPA可以触发另一个隐式流,但这一次使用prompt查询参数。


提示

空格分隔的区分大小写的ASCII字符串值列表
指定授权服务器是否提示最终用户输入
重新认证和同意。定义的值是:none,登录名,同意和select_account


如果您的身份提供者维护一个长期存在的会话(例如:几个小时或几天),或者如果它保持一个记住我的cookie,则SPA可以使用prompt=none使其跳过身份提供者的登录步骤。基本上,您将获得基于浏览器的SSO行为。

关于asp.net-core - OpenId Connect更新SPA中的access_token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50581462/

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