1

我绝不是 MSAL/JWT/Graph 身份验证方面的专家,但我希望有人可以更清楚地向我解释这个问题,或者帮助我了解是否有解决方法或更好的方法。

从本质上讲,在某些情况下,我最终可能会使用 Microsoft Graph JWT 令牌。我可以轻松想到的两个示例是使用 Microsoft Graph Toolkit 或在 Microsoft Teams 中使用 Tabs SSO。在这两种情况下,我都可以从我已经拥有的 JWT 令牌(通过 Graph Toolkit 或通过 Teams SSO)获取用户的相关身份信息——他们的 Azure AD 对象 ID 和租户 ID。但是,我不能将相同的令牌用于我自己的后端 API,因为根据我的研究,我无法针对该 JWT 令牌执行基本令牌验证。例如,我希望能够针对该用户和租户 ID 组合存储信息。

我确实知道我可以进行自己的身份验证(例如 MSAL.js),我什至可以通过扩展其使用来使用 SAME Azure AD 应用程序,但是如果我已经可以访问它,那么简单地使用我已经可以访问的令牌会容易得多只有一种方法可以验证它。例如,在 Teams 中,SSO 用户体验被很好地集成,但我需要让用户通过另一个登录,甚至可能是相同的 Azure AD 应用程序。[更新:所以从技术上讲,这不是另一个“登录”——用户已经登录,因此是“SSO”,但他们需要再次同意,在这种情况下,他们需要再次同意他们之前同意的同一个应用程序]。

所以,我的问题是,有什么方法可以安全地验证现有令牌?

4

2 回答 2

3

Graph 的 AAD 令牌不适用于您的应用程序/服务,您不应尝试验证甚至解码它。在某些情况下,令牌可能会被加密,从而防止您甚至将其破解。您可以安全地使用 Graph 令牌做的唯一事情是使用它调用 Graph API(只要令牌具有必要的范围)。如果令牌没有必要的范围,那么您将从图表中收到错误消息。

你能帮我更好地理解你的情况吗?你是如何生成这个 Graph 令牌的?通常,当您使用 Tab SSO 时,Teams 生成的令牌不适用于 Graph;它适用于您在 AAD 中注册并在应用清单的 webApplicationInfo 部分中列出的 Web API。要调用下游图形 API,您需要通过 AAD 的 OBO 流交换此令牌: https ://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow

如果您的应用没有获得必要的同意,则此交换将失败,您可以将其用作触发弹出式身份验证流程并征得用户同意的信号。这记录在这里: https ://docs.microsoft.com/en-us/microsoftteams/platform/tabs/how-to/authentication/auth-aad-sso

于 2020-12-15T02:59:19.720 回答
0

要验证访问令牌,您需要验证签名、声明、颁发者、受众和签名令牌,这些都需要根据 OpenID 发现文档中的值进行验证。

参考 - https://docs.microsoft.com/en-us/azure/active-directory/develop/access-tokens#validating-tokens

C# 示例 -如何验证 Azure AD 安全令牌?

于 2020-11-24T02:27:52.567 回答