azure访问令牌-jwt.io中的签名无效

50few1ms  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(529)

这是一场噩梦。我在使用jwt.io验证azure访问令牌签名时遇到问题。不管我做什么,答案总是无效的签名。
有人能帮忙吗?
我的步骤:
我从msaljavaapp示例(msaljavawebapp示例)生成了一个令牌id和访问令牌。
我从我的azure访问令牌中得到访问服务器的访问令牌头中的“kid” jwt.io .
我访问 "https://login.microsoftonline.com/<TENANT_ID>/v2.0/.well-known/openid-configuration" 我从步骤3打开链接“jwks\u uri”访问。 "https://login.microsofto…f143/discovery/v2.0/keys" 我从第二步找到了孩子,我在 "https://login.microsofto…f143/discovery/v2.0/keys" .
我将“x5c”复制到步骤5中描述的url中。
我打开jwt.io。
我复制从步骤2中检索到的访问令牌,并将其复制到编码字段中。
我在第一个字段中复制从步骤6检索到的关于签名的“x5c”属性(布局图1)
-----布局-1----
-----开始公钥---miidbccae2gawibagiqqir8gznkuyph6cp+kie5ijanbgkqhkig9w0baqsfadatmswkqydvqdyjy2nvdw50cy5hy2nlc3njb250cm9slndpbmrvd3submv0mb4xdtiwmdgyodawmdawmdawmdowmfoxdti1mdgyodawmdawmdowmfowltermckga1eaxmiwnjb3vudhmuywzzzzy29udhjvbc53aw5djkb3dzlm5lddcasiwddqyjkozihvcnaqbamkypurhtpzc+6cbxqpl0saab+8czliidyx2xvkkkkkkkjmsdrowlaonzvx一项工作是一项工作,包括8个工作,18个工作,7个工作,8个工作,6个工作,6个工作,8个工作,8个工作,8个部门,6个城市,6个城市,6个家庭,6个工作,6个家庭,6个工作,8个工作,8个工作,8个工作,8个工作,6个工作,6个工作,6个工作,6个工作,8个工作,6个工作,8个工作,8个部门,8个工作,8个,8个部门,8个城市,6个城市,6个城市,6个城市,6个城市,6个城市,6个城市,6个城市的发展,6个城市,6个城市,6个城市,6个制造业,6个城市,6个城市,6个制造业,6个,6个城市,6个制造业,6个,6个城市,6个国家,6个制造业,8个,8个,8个城市,8个城市,这个这个,这个项目,这个2cma0gcsqgsib3dqebcwuaa4ibaqdfnk公司研究结果表明,98年CBCnvvvd4ozzkpqqqvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvd2mmv/yssbcwwwwwwwfqqqqvvvvqqqqqqvvvvvv6/zzzzzzzzzzzzzzzzzvvvvvvzvvvvvvvvvvv4/4+8m4+8y6+8y6+8y6、zzzzzzzzzvvvvvzzzzzzzzzzzzzzzvvvvvvzzzzzzvI9XFW2QLGH7K5I8-----结束公钥-----
但结果总是一样的。签名无效。
在我的应用程序中,我使用这个URL。

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
&amp;state=12345
&amp;session_state=716c6fa7-8b51-4025-98ef-489c3b25ab3d#

请求azure令牌
post方法

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"
}

为什么当我尝试在中检查“refresh\u token”:“pc6ymqqlpvm”www.jwt.io 签名无效。
拜托,你能告诉我我做错了什么吗?我是否需要指示azure来签署访问令牌?
注意:我使用本教程检查访问令牌的签名。https://blogs.aaddevsup.xyz/2019/03/using-jwt-io-to-verify-the-signature-of-a-jwt-token/
谨致问候,马里奥·罗德里格斯

zphenhs4

zphenhs41#

您正在请求由scope参数指定的ms graph api的访问令牌: scope=openid profile email User.Read . user.read是ms graph api作用域。
这些令牌是特殊的,您不应该验证它们。以任何方式验证其他API的令牌都不是你的应用程序的工作。刷新令牌类似于你的应用程序无法验证它们。它们只对身份提供者有意义。
您应该验证的唯一令牌是访问群体(aud)是应用程序的客户端id或应用程序id uri的令牌。

相关问题