如何在 Web 应用程序中从 Azure AD 刷新 ID 令牌?

Posted

技术标签:

【中文标题】如何在 Web 应用程序中从 Azure AD 刷新 ID 令牌?【英文标题】:How to refresh an ID Token from Azure AD in a Web App? 【发布时间】:2016-11-20 00:26:44 【问题描述】:

我正在尝试设置 Azure Web 应用程序以通过 Azure AD 进行身份验证并在后台自动刷新 ID 令牌。 一篇很棒的博客文章帮助我理解了整个事情是如何运作的: https://cgillum.tech/2016/03/07/app-service-token-store/

从它链接的本指南帮助我进行了设置: http://cgillum.tech/2016/03/25/app-service-auth-aad-graph-api/

似乎为 Azure AD 身份验证启用刷新令牌并不那么简单,因此我建议我使用上述指南来设置它,就好像它是为 GraphApi 设置的一样。

我遇到的问题是即使在调用“.auth/refresh”端点然后调用“.auth/me”端点之后,唯一刷新的令牌是访问令牌。该令牌对我没有用,因为我在与后端服务器通信时使用了 Id 令牌(使用“授权承载”标头)。

那么如何让 Id Token 也刷新?

【问题讨论】:

【参考方案1】:

很遗憾,AAD 不支持刷新 ID 令牌。只能刷新访问令牌。见这里:https://azure.microsoft.com/en-us/documentation/articles/active-directory-protocols-oauth-code/#refreshing-the-access-tokens

但即使可以刷新,在使用其他服务进行身份验证时使用访问令牌更正确,因此我建议更改您的应用程序以这种方式工作。访问令牌和 id_token 的声明非常相似,因此它不应该是一个非常破坏性的更改。

【讨论】:

嘿,克里斯,我从您的评论中看到,我们应该使用 access_tokens 而不是 id_tokens,但我发现只有 id_token 适用于不记名身份验证。您对在执行承载身份验证时如何使用access_token 有任何指导吗? 访问令牌绝对应该适用于不记名令牌身份验证。如果它不起作用,那么您需要在服务器端日志中查看验证错误。如果这是一个具有身份验证/授权的 Web 应用程序,那么您可以通过启用应用程序日志记录来找到此信息。我的猜测是观众验证失败,这很容易修复。 这是否适用于我们自己的 API 应用程序?我刚刚检查了日志并在使用访问令牌进行不记名身份验证时收到了 JWT 验证错误。 您声称“访问令牌和 id 令牌非常相似,您应该更改所有内容以使用访问令牌”有点冒险。开发 Open ID 并不是因为有些人很无聊,不想使用访问令牌进行身份验证,而是因为它们的范围不同而开发的。虽然访问令牌授予您对第三方 API 中受保护资源的访问权限,但 id-token 为您提供了一种无需任何特定访问权限即可验证用户身份的方法,因此不应混淆或替换它们。 @AndrésMongeMoreno 你把我的回答完全断章取义了。我建议切换到访问令牌是因为这是进行 OAuth 的正确方法。关于常见声明的评论特定于 AAD 的实现(OIDC 不适用于此处),仅表明这不是 OP 的服务器端代码的重大更改。

以上是关于如何在 Web 应用程序中从 Azure AD 刷新 ID 令牌?的主要内容,如果未能解决你的问题,请参考以下文章

如何从同一 Azure AD 中的另一个 Web 应用程序访问 Web api?

Azure AD 应用程序未出现在 Azure Web 应用程序的现有 AD 应用程序列表中

使用 azure AD B2C 进行 blazor web api 身份验证

如何在 ASP.NET Core 3 上同时使用 Azure AD 身份验证和身份?

尝试使用 protobuf-net 通过 gRPC-Web 进行 Azure AD 身份验证

如何在 SPA 应用程序中从 Web API 访问 Graph API