Keycloak 密钥斗篷中的授权代码授权流

Keycloak 密钥斗篷中的授权代码授权流,keycloak,openid-connect,Keycloak,Openid Connect,我是新手,读了很多书之后,我觉得我不太明白如何在keydepeat中实现授权代码流。 我的疑问是: 创建支持此流的客户端后,如何执行凭据验证?默认情况下,如果我没有配置任何东西,我会得到一个登录表单。如果我在浏览器中打开此html并填写用户和密码字段,当我按下按钮时,它会将我发送到类型为“../realms/{REAL_NAME}/login actions/authenticate?session_code=…”的url,但我不明白这是否应该起作用(似乎不起作用),或者是否需要添加身份提供者之

我是新手,读了很多书之后,我觉得我不太明白如何在keydepeat中实现授权代码流。 我的疑问是:

  • 创建支持此流的客户端后,如何执行凭据验证?默认情况下,如果我没有配置任何东西,我会得到一个登录表单。如果我在浏览器中打开此html并填写用户和密码字段,当我按下按钮时,它会将我发送到类型为“../realms/{REAL_NAME}/login actions/authenticate?session_code=…”的url,但我不明白这是否应该起作用(似乎不起作用),或者是否需要添加身份提供者之类的其他内容

  • 如果有必要添加一个提供商,您如何添加一个非外部的提供商,如Google、Facebook等?我已经看到了keydape OpenID提供程序选项,但是我不太清楚应该在Authorization端点、token端点、client等字段中放置什么。我应该使用现有客户机还是生成新客户机

  • 如果问题看起来很明显,我很抱歉,但是如果不使用外部IDP,我就无法完成整个流程。 提前谢谢

  • 您的客户端(应用程序)需要支持oauth(或saml)。您可以在KeyClope中创建一个客户端。您可以使用KeyClope设置(url、id、密钥?)配置应用程序。您的客户端将用户发送到KeyClope。用户登录到KeyClope并将被发送回您的应用程序。 可以实现自己的登录表单,并通过api将数据发送到KeyClope。我同意第一种方法。 ()
  • 您想在没有外部提供程序的情况下试用KeyClope,但想使用外部提供程序?我创造了两个领域。在realm1中,我添加了一个客户机(saml或oauth,随便你喜欢)。在realm2中,我添加了一个身份提供者——我在realm1客户端中设置的东西。现在我可以使用realm1中的用户登录realm2。 如果您想使用外部身份提供者(如FB)或公司拥有的身份提供者,只需执行第二步并添加身份提供者。 ()
  • 您的客户端(应用程序)需要支持oauth(或saml)。您可以在KeyClope中创建一个客户端。您可以使用KeyClope设置(url、id、密钥?)配置应用程序。您的客户端将用户发送到KeyClope。用户登录到KeyClope并将被发送回您的应用程序。 可以实现自己的登录表单,并通过api将数据发送到KeyClope。我同意第一种方法。 ()
  • 您想在没有外部提供程序的情况下试用KeyClope,但想使用外部提供程序?我创造了两个领域。在realm1中,我添加了一个客户机(saml或oauth,随便你喜欢)。在realm2中,我添加了一个身份提供者——我在realm1客户端中设置的东西。现在我可以使用realm1中的用户登录realm2。 如果您想使用外部身份提供者(如FB)或公司拥有的身份提供者,只需执行第二步并添加身份提供者。 ()

  • 非常感谢你的回答

    我的解释可能不太准确,我会提供更多细节。我有一个配置为openid connect并启用标准流的客户端。 当我提出第一个请求时,例如:

    curl -v -d "scope=openid&client_id=backend&response_type=code&redirect_uri=https://www.example.com/callback" -H "Content-Type: application/x-www-form-urlencoded" -X POST localhost:8180/auth/realms/myrealm/protocol/openid-connect/auth
    
    我收到一个带有登录表单的HTML。我的问题从这里开始(可能是因为我没有在为此设计的流程中使用浏览器)。如果我将这个html存储在一个文件中,我在浏览器中打开它并尝试输入用户名和密码,我会收到一个错误。如果我打开HTML代码,我可以看到以下操作:

    http://localhost:8180/auth/realms/myrealm/login-actions/authenticate?session_code=r8p94ca0Umrc-S9BMPC_U168Vmc9y_KESCEI_dHk52I&execution=b47d36ec-2b7d-4ec3-aaf7-cf68ca5d2380&client_id=backend&tab_id=9UEVmEJPLio
    
    所以我知道我可以通过发送POST请求来继续这个过程,但我不能(我得到了一个带有错误HTML的400)。我的疑问是,这种默认身份验证是否应该能够在不配置任何身份提供程序的情况下完成?我明白,是的,但是怎么做呢

    如果我尝试另一个流作为凭据,我将获得一个访问令牌,没有问题,但使用授权代码流,我无法通过登录表单


    编辑:当我写一个问题时,我可以在编辑器中看到所有的行,但当它被发布时,第一行消失了(我打招呼的地方),这就是为什么我看起来如此粗鲁,我道歉

    非常感谢您的回答

    我的解释可能不太准确,我会提供更多细节。我有一个配置为openid connect并启用标准流的客户端。 当我提出第一个请求时,例如:

    curl -v -d "scope=openid&client_id=backend&response_type=code&redirect_uri=https://www.example.com/callback" -H "Content-Type: application/x-www-form-urlencoded" -X POST localhost:8180/auth/realms/myrealm/protocol/openid-connect/auth
    
    我收到一个带有登录表单的HTML。我的问题从这里开始(可能是因为我没有在为此设计的流程中使用浏览器)。如果我将这个html存储在一个文件中,我在浏览器中打开它并尝试输入用户名和密码,我会收到一个错误。如果我打开HTML代码,我可以看到以下操作:

    http://localhost:8180/auth/realms/myrealm/login-actions/authenticate?session_code=r8p94ca0Umrc-S9BMPC_U168Vmc9y_KESCEI_dHk52I&execution=b47d36ec-2b7d-4ec3-aaf7-cf68ca5d2380&client_id=backend&tab_id=9UEVmEJPLio
    
    所以我知道我可以通过发送POST请求来继续这个过程,但我不能(我得到了一个带有错误HTML的400)。我的疑问是,这种默认身份验证是否应该能够在不配置任何身份提供程序的情况下完成?我明白,是的,但是怎么做呢

    如果我尝试另一个流作为凭据,我将获得一个访问令牌,没有问题,但使用授权代码流,我无法通过登录表单

    编辑:当我写一个问题时,我可以在编辑器中看到所有的行,但当它被发布时,第一行消失了(我打招呼的地方),这就是为什么我看起来如此粗鲁,我道歉