孩子在 OAuth 2.0 流程上不匹配
kid not matching on OAuth 2.0 flow
我正在使用 Okta 进行身份管理。作为授权流程中的客户端,我向 Okta 发送授权请求。这工作成功,我得到了一个 JWT 负载。我想验证 JWT 签名,所以我再次调用 Okta 以获取密钥。但是,密钥 ID(孩子)不匹配,验证失败。
初始授权请求:
https://{{site}}.okta.com/oauth2/v1/authorize
?scope=openid
&response_type=id_token
&client_id={{client_id}}
&redirect_uri={{redirect_url}}
&nonce=4euiv0v52at3la15e7qlu1mt43
&state=7c92bqulrmdk2jk0ro9rd3mf5j
响应是 403,将我重定向到:
{{redirect_url}}/id_token={{id_token}}
id_token的header被解码为:
{
"alg": "RS256",
"kid": "2YKtkekCjCRWN0YqGsjUrNwIQaxGg5ahfHW0_fK8t64"
}
到目前为止一切顺利。我知道授权成功了。是时候验证 JWT 了。
然而,当这跟进时:
https://{{site}}.okta.com/oauth2/v1/keys
或者
https://{{site}}.okta.com/oauth2/v1/keys?clientId={{client_id}}
(他们都 return 相同的回复),我得到了这个:
{
"keys": [
{
"alg": "RS256",
"e": "AQAB",
"n": "gv1rI9A7mrOoViJZTzUfiZl7YdEzLEofvRoVbXCgeW7aOmoKcAkWGHvqNRGoFgi8auV5b_TSgTXKq_TV1fz643hpAtba3V0Uw2lXchTbqXpmVRYXI1t4FIwRMXLe4Q-kcvp9la21e3D1lszjdPbFNX5GLAhrCW0Thu2HYbTLg6TbDTMaiQCMo15hek0JgZqRGzCkt9kINnwPVLXV_bkSh_fHWo_6G1L0MKYYQcgE6zvPlULLek98-yZ6Nlg6nJUY9nHn0qjhzqqq-bz_Vin8qi3Bt7SjUKwk7HbaugM84AEgDxYE5JgsaALIl5SgIc3GgFEc69qKWymoD-w1a8f1HQ",
"kid": "SOxFkBSLWefjlZoDI49Hk0nqlYtC28cjhTlVAYEzAxs",
"kty": "RSA",
"use": "sig"
}
]
}
孩子与我在原始回复中收到的内容不符。
我的错误在哪里?
您需要创建一个授权服务器并将其用作端点,例如:
https://{{site}}.okta.com/oauth2/{authorizationServerId}/v1/authorize
您应该也可以使用默认的:
https://{{site}}.okta.com/oauth2/default/v1/authorize
请注意,这与您使用的路由(未指定授权服务器)不同:
https://{{site}}.okta.com/oauth2/v1/authorize
您应该为 OAuth 2.0 和 OpenID Connect 指定一个授权服务器(如上面的示例 1 和 2)。
问题在于此帐户是使用固定密钥设置的,而不是旋转密钥。 oauth2/v1/keys 如果您使用固定键设置,则需要将客户端 ID 作为参数传入;正确的参数名称是 "client_id",而不是 "clientId." 这会产生预期的输出。
我正在使用 Okta 进行身份管理。作为授权流程中的客户端,我向 Okta 发送授权请求。这工作成功,我得到了一个 JWT 负载。我想验证 JWT 签名,所以我再次调用 Okta 以获取密钥。但是,密钥 ID(孩子)不匹配,验证失败。
初始授权请求:
https://{{site}}.okta.com/oauth2/v1/authorize
?scope=openid
&response_type=id_token
&client_id={{client_id}}
&redirect_uri={{redirect_url}}
&nonce=4euiv0v52at3la15e7qlu1mt43
&state=7c92bqulrmdk2jk0ro9rd3mf5j
响应是 403,将我重定向到:
{{redirect_url}}/id_token={{id_token}}
id_token的header被解码为:
{
"alg": "RS256",
"kid": "2YKtkekCjCRWN0YqGsjUrNwIQaxGg5ahfHW0_fK8t64"
}
到目前为止一切顺利。我知道授权成功了。是时候验证 JWT 了。
然而,当这跟进时:
https://{{site}}.okta.com/oauth2/v1/keys
或者
https://{{site}}.okta.com/oauth2/v1/keys?clientId={{client_id}}
(他们都 return 相同的回复),我得到了这个:
{
"keys": [
{
"alg": "RS256",
"e": "AQAB",
"n": "gv1rI9A7mrOoViJZTzUfiZl7YdEzLEofvRoVbXCgeW7aOmoKcAkWGHvqNRGoFgi8auV5b_TSgTXKq_TV1fz643hpAtba3V0Uw2lXchTbqXpmVRYXI1t4FIwRMXLe4Q-kcvp9la21e3D1lszjdPbFNX5GLAhrCW0Thu2HYbTLg6TbDTMaiQCMo15hek0JgZqRGzCkt9kINnwPVLXV_bkSh_fHWo_6G1L0MKYYQcgE6zvPlULLek98-yZ6Nlg6nJUY9nHn0qjhzqqq-bz_Vin8qi3Bt7SjUKwk7HbaugM84AEgDxYE5JgsaALIl5SgIc3GgFEc69qKWymoD-w1a8f1HQ",
"kid": "SOxFkBSLWefjlZoDI49Hk0nqlYtC28cjhTlVAYEzAxs",
"kty": "RSA",
"use": "sig"
}
]
}
孩子与我在原始回复中收到的内容不符。
我的错误在哪里?
您需要创建一个授权服务器并将其用作端点,例如:
https://{{site}}.okta.com/oauth2/{authorizationServerId}/v1/authorize
您应该也可以使用默认的:
https://{{site}}.okta.com/oauth2/default/v1/authorize
请注意,这与您使用的路由(未指定授权服务器)不同:
https://{{site}}.okta.com/oauth2/v1/authorize
您应该为 OAuth 2.0 和 OpenID Connect 指定一个授权服务器(如上面的示例 1 和 2)。
问题在于此帐户是使用固定密钥设置的,而不是旋转密钥。 oauth2/v1/keys 如果您使用固定键设置,则需要将客户端 ID 作为参数传入;正确的参数名称是 "client_id",而不是 "clientId." 这会产生预期的输出。