Azure 访问令牌 - Jwt.io 中的签名无效

Ale*_*dre 7 java jwt azure-active-directory

这真是一场噩梦。我在使用 jwt.io 验证 Azure 访问令牌签名时遇到问题。不管我做什么,答案总是无效的签名。

\n

有人可以尝试帮忙解决这个问题吗?

\n

我的步骤:

\n
    \n
  1. 我从 MSAL Java 应用程序示例 (msal-java-webapp-sample) 生成了令牌 ID 和访问令牌。
  2. \n
  3. 我从我的 Azure 访问令牌中获取访问jwt.io.
  4. \n
  5. 我访问"https://login.microsoftonline.com/<TENANT_ID>/v2.0/.well-known/openid-configuration"
  6. \n
  7. 我打开第 3 步中的链接“jwks_uri”访问。"https://login.microsofto\xe2\x80\xa6f143/discovery/v2.0/keys"
  8. \n
  9. 我从第 2 步中获取了孩子,并在"https://login.microsofto\xe2\x80\xa6f143/discovery/v2.0/keys".
  10. \n
  11. 我将“x5c”复制到步骤 5 中描述的 URL 中。
  12. \n
  13. 我打开 jwt.io。
  14. \n
  15. 我复制从步骤 2 检索到的访问令牌并将其复制到编码字段中。
  16. \n
  17. 我将第 6 步中检索到的“x5c”属性复制到有关签名的第一个字段中。(布局-1)
  18. \n
\n

----- 布局-1 ----

\n

-----开始公钥-----\nMIIDBTCCAe2gAwIBAgIQQiR8gZNKuYpH6cP+KIE5ijANBgkqhkiG9w0BAQsFADAtMSswKQYDVQQDEyJhY2NvdW50cy5hY2Nlc3Njb250cm9sLndpbmRvd3MubmV0MB4XDTIwMDgyODAwMDA WMFoXDTI1MDgyODAwMDAwMFowLTErMCkGA1UEAxMiYWNjb3VudHMuYWNjZXNzY29udHJvbC53aW5kb3dzLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMkymupuRhTpZc+6CBxQpL0SaAb+8CzLiiDy x2xRoecjojvKN2pKKjIX9cejMSDRoWaOnZCK4VZVX1iYRCWT1WkHb8r1ZpSGa7oXG89zxjKjwG46tiamwdZjJ7Mhh8fqLz9ApucY/LICPMJuu6d56LKs6hb4OpjylTvsNUAa+bHg1NgMFNg0fPCxdr9 N2Y4J+Jhrz3VDl4oU0KDZX/pyRXblzA8kYGWm50dh5WB4WoB8MtW3lltVrRGj8/IgTf9GxpBsO9OWgwVByZHU7ctZs7AmUbq/59Ipql7vSM6EsoquXdMiq0QOCZAPitwzHkTKrmeULz0/RHnuBGXxS/e 8wX0CAwEAAaMhMB8wHQYDVR0OBBYEFGcWXwaqmO25Blh2kHHAFrM/AS2CMA0GCSqGSIb3DQEBCwUAA4IBAQDFnKQ98CBnvVd4OhZP0KpaKbyDv93PGukE1ifWilFlWhvDde2mMv/ysBCWAR8AGSb1pAW/ZaJl MvqSN/+dXihcHzLEfKbCPw4/Mf2ikq4gqigt5t6hcTOSxL8wpe8OKkbNCMcU0cGpX5NJoqhJBt9SjoD3VPq7qRmDHX4h4nniKUMI7awI94iGtX/vlHnAMU4 +8y6sfRQDGiCIWPSyypIWfEA6/O+SsEQ7vZ/b4mXlghUmxL+o2emsCI1e9PORvm5yc9Y/htN3Ju0x6ElHnih7MJT6/YUMISuyob9/mbw8Vf49M7H2t3AE5QIYcjqTwWJcwMlq5i9XfW2QLGH 7K5i8\n-----结束公钥-----

\n

但结果总是一样的。签名无效。

\n

在我的应用程序中,我使用这个 URls。

\n
Request Azure Code Auth\nhttps://login.microsoftonline.com/<Tenant_Id>/oauth2/v2.0/authorize?\nclient_id=xxxxxx12312xxxxxxxx\n&response_type=code\n&redirect_uri=http://localhost:8443/<AppName>/secure/aad\n&response_mode=query\n&scope=openid+profile+offline_access\n&state=12345\n&prompt=login\n\n---- response ---\nlocalhost:8443/msal4jsample/secure/aad?\ncode=0.AAAAe7KHdX9Z7oIAA\n&amp;state=12345\n&amp;session_state=716c6fa7-8b51-4025-98ef-489c3b25ab3d#\n\n
Run Code Online (Sandbox Code Playgroud)\n

请求 Azure 令牌

\n

邮寄法

\n
https://login.microsoftonline.com/common/oauth2/v2.0/token?\ngrant_type=authorization_code\n&code=<Received from above azure code auth request>\n&client_id=<Application_Id Registered in Azure>\n&client_secret=<Secret Key>\n&scope=openid profile email User.Read\n&redirect_uri=http://localhost:8443/<MyApp>/secure/aad\n\n\n---- Response ----\n\n{\n    "token_type": "Bearer",\n    "scope": "openid profile User.Read email",\n    "expires_in": 3599,\n    "ext_expires_in": 3599,\n    "access_token": "X1YmQ",\n    "refresh_token": "PC6YMqqLpvm",\n    "id_token": "Y86JentfTUzBQoiUzav3pAu3GIG3OhslQ"\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

为什么当我尝试检查www.jwt.io中的 "refresh_token": "PC6YMqqLpvm" 时签名无效。

\n

拜托,你能告诉我我做错了什么吗?我是否需要指示 Azure 签署访问令牌?

\n

注意:我已使用本教程检查访问令牌的签名。\n https://blogs.aaddevsup.xyz/2019/03/using-jwt-io-to-verify-the-signature-of-a -jwt-令牌/

\n

亲切的问候,\n马里奥·罗德里格斯

\n

juu*_*nas 8

您正在请求范围参数指定的 MS Graph API 的访问令牌:scope=openid profile email User.Read。User.Read 是 MS Graph API 范围。

这些令牌很特殊,您不应该验证它们。无论如何,验证其他 API 的令牌都不是您的应用程序的工作。刷新令牌的类似之处在于您的应用程序无法验证它们。它们仅对身份提供者有意义。

您应该验证的唯一令牌是受众 (aud) 是应用程序的客户端 ID 或应用程序 ID URI 的令牌。