【发布时间】:2021-03-16 20:02:41
【问题描述】:
这是一场噩梦。我在使用 jwt.io 验证 Azure 访问令牌签名时遇到问题。不管我做什么,答案总是无效的签名。
有人可以帮忙吗?
我的步骤:
- 我从 MSAL Java 应用示例 (msal-java-webapp-sample) 生成了令牌 ID 和访问令牌。
- 我从 Azure 访问令牌中获得访问令牌标头中访问
jwt.io的“孩子”。 - 我访问
"https://login.microsoftonline.com/<TENANT_ID>/v2.0/.well-known/openid-configuration" - 我从第 3 步打开链接“jwks_uri”访问。
"https://login.microsofto…f143/discovery/v2.0/keys" - 我从第 2 步得到了孩子,我在
"https://login.microsofto…f143/discovery/v2.0/keys"找到了它。 - 我复制步骤 5 中描述的 URL 中的“x5c”。
- 我打开 jwt.io。
- 我复制从第 2 步检索到的访问令牌并将其复制到编码字段中。
- 我将第 6 步中检索到的“x5c”属性复制到有关签名的第一个字段中。 (布局-1)
----- 布局 1 ----
-----开始公钥----- MIIDBTCCAe2gAwIBAgIQQiR8gZNKuYpH6cP + KIE5ijANBgkqhkiG9w0BAQsFADAtMSswKQYDVQQDEyJhY2NvdW50cy5hY2Nlc3Njb250cm9sLndpbmRvd3MubmV0MB4XDTIwMDgyODAwMDAwMFoXDTI1MDgyODAwMDAwMFowLTErMCkGA1UEAxMiYWNjb3VudHMuYWNjZXNzY29udHJvbC53aW5kb3dzLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMkymupuRhTpZc + 6CBxQpL0SaAb + 8CzLiiDyx2xRoecjojvKN2pKKjIX9cejMSDRoWaOnZCK4VZVX1iYRCWT1WkHb8r1ZpSGa7oXG89zxjKjwG46tiamwdZjJ7Mhh8fqLz9ApucY / LICPMJuu6d56LKs6hb4OpjylTvsNUAa + bHg1NgMFNg0fPCxdr9N2Y4J + Jhrz3VDl4oU0KDZX / pyRXblzA8kYGWm50dh5WB4WoB8MtW3lltVrRGj8 / IgTf9GxpBsO9OWgwVByZHU7ctZs7AmUbq / 59Ipql7vSM6EsoquXdMiq0QOcZAPitwzHkTKrmeULz0 / RHnuBGXxS / e8wX0CAwEAAaMhMB8wHQYDVR0OBBYEFGcWXwaqmO25Blh2kHHAFrM / AS2CMA0GCSqGSIb3DQEBCwUAA4IBAQDFnKQ98CBnvVd4OhZP0KpaKbyDv93PGukE1ifWilFlWhvDde2mMv / ysBCWAR8AGSb1pAW / ZaJlMvqSN / + dXihcHzLEfKbCPw4 / Mf2ikq4gqigt5t6hcTOSxL8wpe8OKkbNCMcU0cGpX5NJoqhJBt9SjoD3VPq7qRmDHX4h4nniKUMI7awI94iGtX / vlHnAMU4 + 8y6sfRQDGiCIWPSyypIWfEA6 / O + SsEQ7vZ / b4mXlghUmxL + o2emsCI1e9PORvm5yc9Y / htN3Ju0x6ElHnih7MJT6 / YUMISuyob9 /mbw8Vf49M7H2 t3AE5QIYcjqTwWJcwMlq5i9XfW2QLGH7K5i8 -----结束公钥-----
但结果总是一样的。签名无效。
在我的应用程序中,我正在使用这个 URls。
Request Azure Code Auth
https://login.microsoftonline.com/<Tenant_Id>/oauth2/v2.0/authorize?
client_id=xxxxxx12312xxxxxxxx
&response_type=code
&redirect_uri=http://localhost:8443/<AppName>/secure/aad
&response_mode=query
&scope=openid+profile+offline_access
&state=12345
&prompt=login
---- response ---
localhost:8443/msal4jsample/secure/aad?
code=0.AAAAe7KHdX9Z7oIAA
&state=12345
&session_state=716c6fa7-8b51-4025-98ef-489c3b25ab3d#
请求 Azure 令牌
发布方法
https://login.microsoftonline.com/common/oauth2/v2.0/token?
grant_type=authorization_code
&code=<Received from above azure code auth request>
&client_id=<Application_Id Registered in Azure>
&client_secret=<Secret Key>
&scope=openid profile email User.Read
&redirect_uri=http://localhost:8443/<MyApp>/secure/aad
---- Response ----
{
"token_type": "Bearer",
"scope": "openid profile User.Read email",
"expires_in": 3599,
"ext_expires_in": 3599,
"access_token": "X1YmQ",
"refresh_token": "PC6YMqqLpvm",
"id_token": "Y86JentfTUzBQoiUzav3pAu3GIG3OhslQ"
}
为什么当我尝试检查 www.jwt.io 中的 "refresh_token": "PC6YMqqLpvm" 时签名无效。
拜托,你能告诉我我做错了什么吗?我需要指示 Azure 来签署访问令牌吗?
注意:我已使用本教程检查访问令牌的签名。 https://blogs.aaddevsup.xyz/2019/03/using-jwt-io-to-verify-the-signature-of-a-jwt-token/
亲切的问候, 马里奥·罗德里格斯
【问题讨论】:
-
令牌是 MS Graph API 令牌吗?如果是,它们是特殊的,您无法验证它们。你不应该以任何方式验证他们的令牌,只需要为你的应用程序验证令牌。
-
嗨@juunas,就我而言,我没有使用MS Graph API。我正在使用 MSAL App 示例生成令牌和 MS 网页作为参考。 docs.microsoft.com/en-us/azure/active-directory/develop/…
标签: java azure-active-directory jwt