密钥斗篷:自定义身份提供程序中的grant_type = password

时间:2018-07-04 22:36:22

标签: keycloak

我向我的领域添加了一个自定义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

7 个答案:

答案 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'

在上面的命令中,您必须提供这些详细信息

  1. 领域名称-您要针对其标记的领域名称
  2. 用户名-您应该具有可以访问上述领域的用户
  3. 密码-以上用户的密码
  4. 客户端ID -
  5. 下的客户端名称(通常是一个字符串值)
  6. 客户端秘密-上面客户端的客户端秘密,您可以在[Realm-> Client List-> Select the client-> Credential tab]中找到

答案 2 :(得分:1)

是的。

您需要在Keycloak设置中为特定客户端启用/授予直接访问权限。

See Attached Postman Request

答案 3 :(得分:0)

您需要使用test-client设置一个客户端,并且该用户应该在领域中可用。

虽然无法获得您想要实现的目标

答案 4 :(得分:0)

我有完全相同的情况,对我来说似乎是个错误。我必须取消帐户与IDP的链接,设置密码并删除待处理的用户操作。这不是解决方案,但在我看来,这是可以的,因为我只需要测试用户帐户即可进行API测试,而在生产环境中则不需要这种情况。

答案 5 :(得分:0)

如果我将Keycloak中的(自动配置的)用户密码设置为某种密码,并且能够使用该密码从外部iDP获取令牌,则可以使用DAG。我用它来研究Okta令牌。希望这会有所帮助。

答案 6 :(得分:0)

Keycloak在DirectGrant身份验证流之前进行以下验证。

  • 用户名
  • 密码
  • otp(如果已配置)
  • 如果已启用用户
  • 如果用户由于蛮力方向而被锁定(仅在启用时被锁定)

您可以在“身份验证->流”中自定义此流,然后选择 (xmlns="http://www.w3.org/2000/svg") <svg xmlns="http://www.w3.org/2000/svg" width="100" height="100"></svg> 流。 例如,您可以禁用Direct grant来授予令牌,而无需检查otp。