Azure active directory 验证Microsoft Graph JWT令牌

Azure active directory 验证Microsoft Graph JWT令牌,azure-active-directory,microsoft-graph-api,microsoft-teams,azure-ad-graph-api,microsoft-graph-toolkit,Azure Active Directory,Microsoft Graph Api,Microsoft Teams,Azure Ad Graph Api,Microsoft Graph Toolkit,我绝对不是MSAL/JWT/Graph身份验证方面的专家,但我希望有人能更清楚地向我解释这个问题,或者帮助我了解是否有解决方法或更好的方法 本质上,在某些情况下,我可能会使用MicrosoftGraphJWT令牌。我可以很容易想到的两个例子是使用Microsoft Graph Toolkit或在Microsoft团队中使用标签SSO。在这两种情况下,我都可以通过Graph Toolkit或团队SSO(他们的Azure AD对象Id和租户Id)从JWT令牌中获取用户的相关身份信息。但是,我不能将同

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

本质上,在某些情况下,我可能会使用MicrosoftGraphJWT令牌。我可以很容易想到的两个例子是使用Microsoft Graph Toolkit或在Microsoft团队中使用标签SSO。在这两种情况下,我都可以通过Graph Toolkit或团队SSO(他们的Azure AD对象Id和租户Id)从JWT令牌中获取用户的相关身份信息。但是,我不能将同一令牌用于我自己的后端API,因为根据我的研究,我无法对该JWT令牌执行基本令牌验证。例如,我希望能够根据用户和租户Id组合存储信息

我知道我可以自己进行身份验证,例如MSAL.js,我甚至可以通过扩展其使用范围来使用同一Azure AD应用程序,但如果有一种验证方法的话,只需使用我已经访问过的令牌就会容易得多。例如,在团队中,SSO用户体验得到了很好的集成,但我需要让用户进行另一次登录,甚至可能是针对同一个Azure AD应用程序。[更新:从技术上讲,这不是另一个“登录”-用户已经登录,因此是“SSO”,但他们需要再次同意,在这种情况下,他们同意的应用程序与他们刚才同意的应用程序完全相同]


因此,我的问题是,有没有办法安全地验证现有令牌?

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

参考-


C的示例-

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

参考-


C的示例-

图形的AAD标记并不适用于您的应用程序/服务,您不应该尝试验证或解码它。在某些情况下,可以对令牌进行加密,从而防止您甚至将其打开。使用图形令牌可以安全地执行的唯一操作是,只要该令牌具有必要的作用域,就可以使用它调用图形API。如果令牌没有必要的作用域,那么您将从图中返回一个错误

你能帮我更好地理解你的情况吗?您是如何生成此图形标记的?通常,当您使用Tab SSO时,团队生成的令牌不用于图形;您向AAD注册并在应用程序清单的webApplicationInfo部分中列出的是您的Web API。要调用下游图形API,您需要通过AAD的OBO流交换此令牌:

如果您的应用程序没有必要的同意,那么此交换将失败,您可以将其用作触发弹出式身份验证流并获得用户同意的信号。这里记录了这一点:

图表的AAD标记不适用于您的应用程序/服务,您不应该尝试验证或解码它。在某些情况下,可以对令牌进行加密,从而防止您甚至将其打开。使用图形令牌可以安全地执行的唯一操作是,只要该令牌具有必要的作用域,就可以使用它调用图形API。如果令牌没有必要的作用域,那么您将从图中返回一个错误

你能帮我更好地理解你的情况吗?您是如何生成此图形标记的?通常,当您使用Tab SSO时,团队生成的令牌不用于图形;您向AAD注册并在应用程序清单的webApplicationInfo部分中列出的是您的Web API。要调用下游图形API,您需要通过AAD的OBO流交换此令牌:

如果您的应用程序没有必要的同意,那么此交换将失败,您可以将其用作触发弹出式身份验证流并获得用户同意的信号。这里记录了这一点:

本例中的问题是,它不仅是一个“Azure AD”令牌,而且是一个图形令牌,它似乎无法以普通方式通过验证-这基本上就是我要说的重点。本例中的问题是,它不仅是一个“Azure AD”令牌,而且是一个图形令牌,这似乎无法以普通方式通过验证-这基本上就是我要表达的观点。嗨@Hilton,我看到这个问题仍然悬而未决,没有具体的解决方案。让我带着这个微软内部团队,带着决议回到你身边。谢谢你,非常感谢Hi@Hilton,我看到这个问题仍然悬而未决,没有具体的解决方案。让我带着微软的内部团队,带着决议回到你身边。谢谢,非常感谢谢谢尤里,我感谢你在
是这是我的场景——基本上,我有一个后端API,我想为用户和整个租户存储信息。在我的一些应用程序中,我甚至不需要授权,因为这只是该用户的个人信息。但是,我确实需要身份验证,以证明调用方是来自特定租户的特定用户。显然,如果没有现成的设备,例如独立的SPA,我会实现端到端的场景,例如使用MSAL。第2部分-空间不足。但是,团队SSO为用户提供了更无缝的体验,它会返回一个基本的标识令牌,已经包含了我需要的所有用户id和租户id,但我的研究告诉我,我无法验证,因此无法使用现有的代币。理论上,我并不真的需要一个“海外建筑运营管理局”,因为我不想在图中调用服务——我只想使用令牌已经包含的标识信息。嘿,希尔顿,谢谢你帮助我更好地理解你的场景。能否确认您正在使用MicrosoftTeam.authentication.getAuthToken API获取访问令牌?如果是,您是否尝试将该令牌放入并检查其内容?这个令牌应该以您的Web API的resourceUri作为访问群体,这意味着它是针对您的服务的。您可以使用Passport.js之类的东西和Passport azure广告策略来验证它。您可以在我的示例应用程序中看到我是如何做到这一点的:是的,这就是我获取它的来源,我已经用jwt.io检查了它。我想我已经意识到了我的问题——我正在努力理解如何验证多租户令牌,因为我没有看到我期望看到的东西。据我现在所知,我可以通过访问群体验证Microsoft是否从中签署了OIDC签名密钥,以及它是否属于我的应用程序,我想这就是我所需要的。基于此,我可以相信这些声明,特别是我需要的oid和tid。感谢Yuri,我感谢您在这方面花费的时间。这是我的场景——基本上,我有一个后端API,我想为用户和整个租户存储信息。在我的一些应用程序中,我甚至不需要授权,因为这只是该用户的个人信息。但是,我确实需要身份验证,以证明调用方是来自特定租户的特定用户。显然,如果没有现成的设备,例如独立的SPA,我会实现端到端的场景,例如使用MSAL。第2部分-空间不足。但是,团队SSO为用户提供了更无缝的体验,它会返回一个基本的标识令牌,已经包含了我需要的所有用户id和租户id,但我的研究告诉我,我无法验证,因此无法使用现有的代币。理论上,我并不真的需要一个“海外建筑运营管理局”,因为我不想在图中调用服务——我只想使用令牌已经包含的标识信息。嘿,希尔顿,谢谢你帮助我更好地理解你的场景。能否确认您正在使用MicrosoftTeam.authentication.getAuthToken API获取访问令牌?如果是,您是否尝试将该令牌放入并检查其内容?这个令牌应该以您的Web API的resourceUri作为访问群体,这意味着它是针对您的服务的。您可以使用Passport.js之类的东西和Passport azure广告策略来验证它。您可以在我的示例应用程序中看到我是如何做到这一点的:是的,这就是我获取它的来源,我已经用jwt.io检查了它。我想我已经意识到了我的问题——我正在努力理解如何验证多租户令牌,因为我没有看到我期望看到的东西。据我现在所知,我可以通过访问群体验证Microsoft是否从中签署了OIDC签名密钥,以及它是否属于我的应用程序,我想这就是我所需要的。基于此,我可以相信这些声明,特别是我需要的oid和tid。