Azure AD B2C OpenID Connect 刷新令牌
Posted
技术标签:
【中文标题】Azure AD B2C OpenID Connect 刷新令牌【英文标题】:Azure AD B2C OpenID Connect Refresh token 【发布时间】:2018-01-08 09:05:08 【问题描述】:我从 Microsoft 站点上的 Azure AD B2C 文档页面中遵循了这个示例 https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-web-dotnet-susi。让它工作正常,但问题是访问令牌有一个小时的生命周期,在那一小时之后,用户需要重新登录。我不想延长 access_token 的生命周期,但想在 access_token 过期之前刷新令牌。我怎样才能做到这一点?
源代码可以在这里找到:https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi
【问题讨论】:
【参考方案1】:从您链接的文章中,我了解到您正在尝试将登录添加到您的应用程序。如果登录是您的唯一目标,那么您不需要使用 access_token。在您想使用访问令牌调用 API/服务之前,不需要与获取访问令牌相关的代码。出于登录目的,id_token 就足够了。
话虽如此,id_token 也有一小时的生命周期。要延长会话,您有几个选择:
-
简单的选择是将应用程序会话生命周期与令牌生命周期分开。您可以通过将 UseTokenLifetime = false 传递给中间件中的 OpenIdConnectAuthenticationOptions 来做到这一点。
您可以将会话生命周期与 Azure AD 会话生命周期相关联。这将涉及通过从隐藏的 iframe 向 Azure AD 发出登录请求来添加逻辑以更新应用的会话。
您可以在blog post 中阅读有关这些方法和权衡取舍的更多信息。
【讨论】:
【参考方案2】:MSAL 库(用于交换示例中的令牌的代码)自动调用 Azure AD B2C 终结点以将 refresh_token 交换为新的 access_token。你应该不需要处理它。
【讨论】:
【参考方案3】:IIRC 没有选项可用于 auto renew 从它自己的库中,但是您可以采用多种选项来实现这一点...简单的一个来自 javascript
-
在 JS 中放置一个超时函数,并在令牌到期之前触发该函数。您可以从令牌到期时间获得。
从 JS 触发 MVC 操作/REST API 方法并从 B2C 获取新的 accestoken 并使用新的 accestoken 更新。
【讨论】:
看起来很有希望。您是否有用于更新访问令牌和更新 cookie 的 .NET 代码示例?以上是关于Azure AD B2C OpenID Connect 刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章
在 Azure AD B2C 中用作 OpenID IDP 提供程序时的 Okta 重定向 URI
使用 Azure b2c OpenID Connect 配置 Ckan 的身份验证
Azure AD B2C:注销社交帐户(使用 OIDC 的 Azure AD)