我向我的领域添加了一个自定义OIDC身份提供程序,并且我想使用直接访问授权流程(或grant_type=password
),但这不起作用。
Keycloak是否可以?
尝试使用授权码流程时,一切正常,但是
grant_type=password
错误
{
"error":"invalid_grant",
"error_description":"Invalid user credentials"
}
返回。
我正在尝试执行以下请求,以获取访问令牌和刷新令牌:
$ curl -X POST 'http://localhost:8080/auth/realms/master/protocol/openid-connect/token'
-H 'content-type: application/x-www-form-urlencoded'
-d 'grant_type=password'
-d 'client_id=test-client'
-d 'client_secret=834a546f-2114-4b50-9af6-697adc06707b'
-d 'username=user' // valid user in custom Identity Provider
-d 'password=password' // password in custom Identity Provider
这是身份提供者配置: this is the Identity Provider configuration
答案 0 :(得分:2)
我也一直坚持这个问题。一开始,我还怀疑它看起来像个错误。但是,转折点是我尝试使用主领域,并使用admin用户尝试了client_id = admin-cli。我可以使用grand_type = password检索令牌。对于我自己的领域和client_id,就像这里报告的那样,它只是失败了。 我发现我的问题是,当我尝试登录到域的控制台(例如:http://localhost:18080/auth/realms/quarkus-workshop-labs/account/)后,我使用的用户未被激活。我需要重设密码,以便最终将其激活。然后,密码grant_type才开始起作用。
(请注意,默认情况下,新创建的用户需要先重置密码才能使用。)
答案 1 :(得分:1)
请在curl命令下面查看
curl -X POST -k -H 'Content-Type: application/x-www-form-urlencoded' -i 'https://135.250.138.93:8666/auth/realms/<Realm-Name>/protocol/openid-connect/token' --data 'username=<userName>&password=<Password>&client_id=<Client-ID>&grant_type=password&client_secret=7df18c0d-d4c7-47b1-b959-af972684dab0'
在上面的命令中,您必须提供这些详细信息
答案 2 :(得分:1)
答案 3 :(得分:0)
您需要使用test-client设置一个客户端,并且该用户应该在领域中可用。
虽然无法获得您想要实现的目标答案 4 :(得分:0)
我有完全相同的情况,对我来说似乎是个错误。我必须取消帐户与IDP的链接,设置密码并删除待处理的用户操作。这不是解决方案,但在我看来,这是可以的,因为我只需要测试用户帐户即可进行API测试,而在生产环境中则不需要这种情况。
答案 5 :(得分:0)
如果我将Keycloak中的(自动配置的)用户密码设置为某种密码,并且能够使用该密码从外部iDP获取令牌,则可以使用DAG。我用它来研究Okta令牌。希望这会有所帮助。
答案 6 :(得分:0)
Keycloak在DirectGrant身份验证流之前进行以下验证。
您可以在“身份验证->流”中自定义此流,然后选择 (xmlns="http://www.w3.org/2000/svg")
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100"></svg>
流。
例如,您可以禁用Direct grant
来授予令牌,而无需检查otp。