使用API​​登录Keycloak

时间:2018-01-12 06:08:51

标签: openid-connect keycloak

我有2个不同的应用程序:说 Application1 Application2

  1. 我已将 Application2 与keycloak集成,并且我可以使用Keycloak的登录页面登录此应用程序。

  2. 现在我想要的是,如果我登录 Application1 (没有keycloak),我应该能够调用keycloak的一些API来登录application2(无需渲染keycloak&#39 ; s登录页面。)

  3. 可行吗?如果是,怎么样?

    任何帮助都将受到高度赞赏。

    由于

5 个答案:

答案 0 :(得分:9)

您实际上是在要求您的用户相信 Application1 会安全地管理他们的密钥泄露凭据。建议不要这样做,因为

  1. 如果用户被重定向到keycloak以输入其凭据,则可以实现更好的安全性。在理想的世界中,客户端应用程序不应处理或访问用户凭据。
  2. 它违背了单点登录的目的,用户只需输入他们需要访问的第一个应用程序的凭据(如果他们的会话未过期)
  3. 但是如果您控制并且可以信任 Application1 并且由于遗留或其他原因需要执行此操作,那么您可以启用名为" Direct Access"的资源所有者凭据流。在Keycloak客户端定义上,然后将用户的凭据作为form-urlencoded数据类型发布到

    https://<keycloak-url>/auth/realms/<realm>/protocol/openid-connect/token
    

    参数将是

    grant_type=password
    client_id=<Application1's client id>
    client_secret=<the client secret>
    username=<the username>
    password=<the password>
    scope=<space delimited list of scope requests>
    

    如果凭据无效,则响应将是有效的JWT对象或4xx错误。

答案 1 :(得分:2)

如果我正确地回答了您的问题,那么您正在尝试通过已登录的另一个应用程序调用仅承载服务,您也没有提及您是使用Spring Boot还是类似的框架,因此我想您正在将Spring Boot用于服务器端应用程序。

以下示例反映了一个均通过Spring Boot对另一个身份验证的API的简单调用:

Your Activity extends AppCompatActivity implements YourAdapter.InterfaceName

通过这种方式可以将原始服务生成的实际有效令牌发送到另一服务。

答案 2 :(得分:0)

- 您可以使用keycloak登录界面登录 Application-1

可以使用各种客户端适配器来实现此目的。在这里,您没有提到您的应用程序框架工作。

要了解有关keyclaok客户端适配器的更多信息:click here

例如,如果您选择Node.js适配器,则可以点击链接:node.js adapter

使用node.js适配器的

keycloak实现,有关REST api和令牌验证机制的详细信息在此链接中得到了很好的解释click for example

答案 3 :(得分:0)

Application2 中,您使用了名为The Authorization Code grant的授予类型;它是grant types指定的几个OAuth framework之一。

Application1 可以通过其获取访问令牌的方法称为password Grant,除非您信任您的应用,否则不建议再使用此授权。

您可以找出here的不同策略,以正确的方式将keycloak与javascript应用程序集成

答案 4 :(得分:0)

如果您使用 Oracle,那么当我们使用应用程序 1 自动登录时,您可以使用 Unsolisated 登录,第二个应用程序将自动登录