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 AD B2C 容易受到开放重定向的影响?

使用 Azure b2c OpenID Connect 配置 Ckan 的身份验证

Azure AD B2C:注销社交帐户(使用 OIDC 的 Azure AD)

Liferay 7.4 OpenID Connect 作为 Azure B2C 的 SP

Azure AD 与 Azure AD B2C 与 Azure AD B2B