azure - 验证 Azure 广告访问 token 时签名无效

标签 azure oauth-2.0 azure-active-directory

我在使用 jwt.io 验证我的 azure 广告访问 token 时收到无效签名(手动检查后将转换为 scala 代码)。

我正在使用curl来生成访问 token :

curl -s -X POST https://login.microsoftonline.com/<tenant id>/oauth2/token -d grant_type=password -d username=$username -d password=$pass  -d resource=$resID -d client_id=$id -d client_secret=$key

虽然它为我提供了访问 token ,但响应不包含“Id_token”。不知道为什么。

我正在包装来自 https://login.microsoftonline.com/common/discovery/keys 的公钥带有 BEGIN 和 END 证书。 (如 https://nicksnettravels.builttoroam.com/post/2017/01/24/Verifying-Azure-Active-Directory-JWT-Tokens.aspx 中所述)

我不确定还缺少什么。

解码后的 header 如下:

{
  "typ": "JWT",
  "alg": "RS256",
  "x5t": "9FXDpbfMFT2SvQuXh846YTwEIBw",
  "kid": "9FXDpbfMFT2SvQuXh846YTwEIBw"
}

最佳答案

警告:您正在调用不受支持的流,该流将在不久的将来被删除。

Azure AD 中不支持使用 secret 客户端(即 Web 应用/Web API,其中存在 client_secret)的资源所有者密码凭据授予流程 (grant_type=password) >)。如果您确信您的场景需要资源所有者流程(很少有场景实际上保证此流程引入的风险),那么您应该使用为 native 客户端应用程序(公共(public)客户端)注册的 client_id 来调用它。客户)。或者,您应该调用交互式登录(如果您正在登录实际的人类用户),或执行客户端凭据授予流程(如果这是守护程序/无人值守服务)。

您没有获得 ID token ,因为您调用的流程(OAuth 2.0 资源所有者密码凭证授予流程)未定义 ID token 或 id_token 响应的任何概念。换句话说:你还没有要求过。

如果您将 scope=openid 添加到您的授权请求中,您将向 Azure AD 暗示您或多或少有兴趣了解有关登录者和您的信息。将在响应中获得未签名的 OpenID Connect ID token 。

https://jwt.io验证声明:

  1. 确保这是为您准备的 token 。 (即,不要期望能够解码和验证不适合您的 token (其中“您”是授权请求中的资源,而aud 在 token 声明中)。
  2. 确保您选择了正确的签名算法 (RS256)。
  3. 确保您正在检查用于签署 token 的 key (使用 JWT 中的 kid header 值作为提示)。
  4. 确保证书以 -----END CERTIFICATE----- 结尾(我发现 jwt.io 不太关心它是如何开始的。
  5. 仔细检查您的复制粘贴,很容易意外拾取多余的字符。

关于azure - 验证 Azure 广告访问 token 时签名无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45038651/

相关文章:

azure - 部署容器组时如何运行多个命令?

Spring OAuth 过滤器链和 Java 配置

java - "Shared secret"用于 JWT 身份验证 SOA

azure-active-directory - 如何通过 Azure AD 检查用户是否在 AD 组中?

c# - 从虚拟机创建azure工作规则

当容器未响应端口 8080 上的 ping 时,Azure 应用服务上带有 pm2 的 Node.js 应用程序失败

oauth-2.0 - ASP.NET Core 2 应用程序中 UseOAuthBearerAuthentication 的等价物是什么?

Azure DevOps API 返回 AAD (Azure Active Directory) 组中的成员数量不正确

azure - 动态365 : is it required to provide terms of service and privacy statement links for all apps?

azure - 每个 Durable 函数实例之间的数据交换是否使用任务中心?