使用 id_token 对受广告保护的应用进行身份验证

Posted

技术标签:

【中文标题】使用 id_token 对受广告保护的应用进行身份验证【英文标题】:authentication to azure ad protected app using id_token 【发布时间】:2021-01-23 21:10:26 【问题描述】:

我有两个应用服务都使用从 azure 门户配置的 azure 广告身份验证进行保护。

前端应用服务是用 Angular 编写的。我遵循的认证方法如下。

    加载 Angular 应用程序。向 .auth/me 发送获取请求,该请求返回给我的 id_token 在我的理解中是我的身份验证令牌。 我存储此令牌,然后在标头中将此令牌作为 Authorization: Bearer *** 转发到我的第二个应用服务 api

但是我观察到,也许第二个应用服务广告允许令牌首先加载。它是不一致的,并且一直给出 401 未经授权的错误。即使在使用后 2-3 分钟内。

我不确定这是否是使用 id_token 的正确方法还是需要使用其他令牌..

【问题讨论】:

您是否检查过受保护的 Web API 的规范? docs.microsoft.com/en-us/azure/active-directory/develop/… 【参考方案1】:

您混淆了ID token 和access token 的用途。

你应该在这里使用的是访问令牌。

您的后端应用在此场景中是受保护的 Web API。

按照adp的建议,您需要关注specific information:

您的应用注册必须至少公开一个范围或一个 应用角色。范围由调用的 Web API 公开 代表用户。

应用程序角色由守护程序调用的 Web API 公开 应用程序(代表自己调用您的 Web API)。

如果您创建新的 Web API 应用注册,请选择访问令牌 您的 Web API 接受的版本为 2。对于旧版 Web API, 接受的令牌版本可以为空,但此值限制 仅组织和个人 Microsoft 的登录受众 不支持帐户 (MSA)。

Web API 的代码配置必须验证使用的令牌 何时调用 Web API。

控制器操作中的代码必须验证角色或范围 在令牌中。

Github 中有一个sample。

要使用 Azure AD 保护您的 API,您需要注册两个 Azure AD 应用程序,一个用于客户端应用程序(前端),另一个用于 API 应用程序(后端)。

在 API 应用中,您需要expose API。通过执行第 7 步和第 8 步,您可以公开范围。

那你需要configure the client app。通过此处的第 8 步,您可以将 API 应用程序公开的权限(范围)添加到客户端应用程序。

使用 MSAL 请求访问令牌,其中包括此权限(范围)。您可以在代码中验证它。如果权限符合您的预期,则允许客户端访问您的 API。

【讨论】:

很遗憾,我无法控制广告配置。我所知道的是我的 Angular 应用程序能够从 .auth/me 获取 id_token 。是否足以向另一个使用广告身份验证相同客户端 id 参数的应用程序服务 api 进行身份验证? @MandarJogalekar 抱歉耽搁了。前几天我是OOF。 Id 令牌不能用于对另一个应用服务 api 进行身份验证。您必须使用访问令牌。由于业务需要,您需要要求组织的管理员为您配置 AAD。 @MandarJogalekar 如果我的回答有帮助,您可以将其标记为已接受。谢谢。

以上是关于使用 id_token 对受广告保护的应用进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

php curl - 需要使用 curl 提供对受保护目录的访问权限

通过 NTLM 对受保护站点使用 wget

如何在 C++ 中对受保护的方法进行单元测试?

我们使用访问修饰符来限制用户对受保护/私有变量的访问,但用户怎么可能尝试访问它们呢?

无法在对受保护方法进行单元测试的适当方法之间做出决定

尝试使用 Cognito 向 Battle.net OIDC 进行身份验证时出现错误的 id_token 颁发者