我有2个不同的应用程序:说 Application1 和 Application2 。
我已将 Application2 与keycloak集成,并且我可以使用Keycloak的登录页面登录此应用程序。
现在我想要的是,如果我登录 Application1 (没有keycloak),我应该能够调用keycloak的一些API来登录application2(无需渲染keycloak&#39 ; s登录页面。)
可行吗?如果是,怎么样?
任何帮助都将受到高度赞赏。
由于
答案 0 :(得分:9)
您实际上是在要求您的用户相信 Application1 会安全地管理他们的密钥泄露凭据。建议不要这样做,因为
但是如果您控制并且可以信任 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 登录,第二个应用程序将自动登录