Jep*_*ppe 1 validation access-token oauth-2.0 azure-active-directory adal
使用jwt.io验证我的Azure广告访问令牌时,我得到了无效签名。但是,我的ID令牌可以很好地验证!
在验证Azure广告访问令牌
和
https://nicksnettravels.builttoroam.com/post/2017/01/24/Verifying-Azure-Active-Directory-JWT-Tokens.aspx时,我已经看到并尝试了无效签名中建议的解决方案,
但是都不适合我的访问令牌。
访问和ID令牌是通过Adal.js生成的:
var endpoints = {
"https://graph.windows.net": "https://graph.windows.net"
};
var configOptions = {
tenant: "<ad>.onmicrosoft.com", // Optional by default, it sends common
clientId: "<app ID from azure portal>",
postLogoutRedirectUri: window.location.origin,
endpoints: endpoints,
}
window.authContext = new AuthenticationContext(configOptions);
Run Code Online (Sandbox Code Playgroud)
为什么我可以验证我的ID令牌,但不能验证我的访问令牌?
Ant*_*ine 34
如果其他人有无效签名错误,您应该检查此评论:https ://github.com/AzureAD/microsoft-authentication-library-for-js/issues/521#issuecomment-577400515
解决了我的配置问题。
本质上,如果您要获取访问令牌来访问您自己的资源服务器而不是 Graph API,则您的 scopes 参数应该是[CLIENT_ID]/.default(并且如果您使用访问令牌来访问 Graph API,则不需要自己验证令牌)
Ole*_*leh 22
感谢Nan Yu,我设法获得了可以由任何公共 jwt 验证器(如jwt.io)验证的令牌 (无法将我的评论放在Nan Yu的答案下的评论部分,因为它太长了)。
因此,据我从Nan Yu提到的讨论中了解到的观点,默认情况下 Azure AD 会为 Microsoft Graph 生成令牌,并且这些令牌使用特殊的签名机制,因此不可能使用公共验证器(除了jwt.ms Microsoft 的验证器)来验证签名。大多数人可能知道神秘的特殊处理意味着什么:))。
要获取可使用公共验证器进行验证的非 Microsoft Graph 的访问令牌,我必须:
User.Read因此在 appConfig > API 权限中将其删除)api://{application-id}/scope-nameopenid offline_access {application-id}/scope-name请注意,在 openid 客户端配置中,新创建的作用域不带 api:// 前缀(offline_access 我必须启用刷新令牌,如果不使用刷新令牌机制,则可以忽略)
小智 6
如果您将 msal.js 库与 React 一起使用,请将其添加到您的身份验证配置中。
scopes: [`${clientId}/.default`]
Run Code Online (Sandbox Code Playgroud)
编辑范围为我解决了问题
请参考线程:https : //github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/609
但是如果查看Jwt.Header,您将看到一个“ nonce”。这意味着您需要特殊处理。正常处理将失败。
因此,如果nonce包含在访问令牌中,则使用JWT.io或JwtSecurityToken验证签名不会成功。
| 归档时间: |
|
| 查看次数: |
4488 次 |
| 最近记录: |