oauth2.0 Keycloak OpenID Connect redirect_uri行为不一致

6gpjuf90  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(168)

我通过docker在本地机器上部署了Keycloak 22.0.5。我有一个自定义的OpenID客户端,其访问权限配置如下:

我不想使用密码授权,我使用pkceauthorization_code变体)授权(与account-console相同)。
这是我发送到服务器进行身份验证的请求:

GET localhost:2137/realms/SpringKeycloak/protocol/openid-connect/auth?
    client_id=login-user
    &redirect_uri=http%3A%2F%2Flocalhost%3A8000
    &state=af08ea5a-9d4d-4850-9491-483809f2c991
    &response_type=code
    &scope=openid
    &code_challenge=Jqd4T8zNX438YOgW-99eFp_7fbMkDb1Tyu0TtU41x3A
    &code_challenge_method=S256
    &grant_type=pkce

字符串
现在,事情是这样的,这工作得很好,但当我试图获得令牌,使用相同的redirect_uri

POST localhost:2137/realms/SpringKeycloak/protocol/openid-connect/token

code=ed24eb7c-ef7e-4c51-b545-c59e0717f6a1.54c25efe-7721-4d81-9f64-99493ee365b9.a2b82e1f-84c7-464f-a555-dcea26162e5a
&grant_type=authorization_code
&client_id=login-user
&redirect_uri=http%3A%2F%2Flocalhost%3A8000
&code_verifier=0a844a24ec41aeb96bc016d8d488794802a066378bbfd35bb8adcf55


然而,它声称,该url现在是无效的:

{
    "error": "invalid_grant",
    "error_description": "invalid parameter: redirect_uri"
}


我不知道是什么原因导致了这种行为。我已经通过配置和互联网进行了查找,但我找不到任何其他可能导致这种行为的设置。
我还尝试将第二个请求中的授权类型更改为pkce,方法与第一个请求相同,但它只引发unsupported_grant_type

xqnpmsa8

xqnpmsa81#

当交换code令牌时,您必须通过HTTP POST(x-www-form-urlencoded)提交所有参数。在这种情况下,redirect_uri不能进行urlencoded,因为执行HTTP POST的工具很可能会为您进行URL编码。
此外,如果你使用Postman,似乎你通过“Params”而不是通过“Body -> x-www-form-urlencoded”发送HTTP POST中的参数。

相关问题