2

我正在使用office-js-helpers身份验证库。使用Microsft Azure AD 2.0 Converged auth端点,我测试了来自 AD 用户(属于 AD 租户)和在...@gmail.comMicrosoft 注册的帐户的登录。

它们都返回一个类似的有效载荷,带有一个access_token属性。主要区别在于,对于 AD 用户,这access_token是一个签名的 JWT,而对于非 AD 帐户,访问令牌是一个 base64 编码(并且可能是加密/编码)字符串。

我可以将任一令牌用于其他 Microsoft API,例如 Graph API,所以我没有指出错误。但是我希望将其access_token用作我自己的 API 的 JWT。

有什么方法可以强制融合身份验证服务为所有登录返回 JWT?

有没有人处理过这个问题并想出一个明智的解决方法?

4

1 回答 1

1

虽然 MSA 帐户不返回基于 JWT 的,但您可以使用OpenID Connectaccess_token请求基于 JWT 。id_token

将 OpenID 流程视为 OAuth 2.0 授权代码授权的最简单方法。它使用相同的通用模型和一些附加参数。

进行初始提供程序调用时:

  1. 添加id_token到您的response_type查询参数。

  2. openid, email, 和添加profilescope查询参数

最终结果应如下所示:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
client_id={ID}&response_type=id_token+code&
redirect_uri={URI}&scope=openid+email+profile+offline_access+user.read

然后,您通过授权码授权完成您今天使用的相同工作流程。但是,最后一步现在将id_token在 JSON 有效负载中包含一个附加属性:

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "token_type": "Bearer",
    "expires_in": 3599,
    "scope": "https%3A%2F%2Fgraph.microsoft.com%2Fmail.read",
    "refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
    "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD...",
}

This id_token will also be a JWT based token and can be easily decoded just like you're doing with the JWT access_token you're getting back from AAD.

于 2018-05-23T20:19:36.433 回答