访问令牌后的Keycloak授权过程
Posted
技术标签:
【中文标题】访问令牌后的Keycloak授权过程【英文标题】:Keycloak authorization process after access token 【发布时间】:2019-07-22 14:26:37 【问题描述】:我想避开 keycloak 登录页面。我将此“Avoid keycloak default login page and use project login page”链接引用并能够使用 post 方法获取访问令牌到“http://localhost:5555/auth/realms/master/protocol/openid-connect/token”链接。
在这一步获得访问令牌后,提到要传递下面的头文件
标题:
授权:'Bearer' + access_token_you_got
但不清楚将访问令牌传递到何处以及响应是什么以及请求的类型。
这个问题可能看起来很基础。由于我是新手,因此需要很长时间才能理解。任何帮助在这里表示赞赏。
【问题讨论】:
【参考方案1】:获取访问令牌后,您必须传递访问令牌才能访问受 keycloak 保护的资源的数据。
headers :
Authorization : 'Bearer ' + access_token_you_got
我也想知道同样的事情,我所做的是为我的应用程序中的每个重定向我创建了一个中间件来验证令牌。如果令牌无效或令牌不存在,用户将被重定向到登录页面进行身份验证。
【讨论】:
这里的 keycloak 保护资源是 Cloud Elements 页面。但是云元素页面没有任何 API 来接受我们的请求。那么我该如何通过这个请求。 在您的中间件中使用正确的承载令牌向 keycloak URL 发送一个 http 请求。如果令牌无效,您将获得 401,否则为 200。对于您的应用程序,为每个重定向调用此中间件。如果令牌有效中间件将转发请求,否则如果令牌无效或不存在,则将它们重定向到登录页面 谢谢。如果发现我的错误。我将令牌传递给 Cloud Elements 页面而不是 keycloak。 谁能告诉我,Keycloak 授权网址是什么? 使用这个 URL http://$KEY_CLOAK_IP/auth/realms/realm/protocol/openid-connect/token/userinfo 为用户生成访问令牌并在中间件中发送一个请求此 URL。此 URL 将响应 200 直到 access_token 有效否则 401【参考方案2】:了解 OAuth2 协议的基础知识、其主要参与者和授权授予类型是一个好的开始。
演员: - 授权服务器 - 资源服务器 - 客户 - 资源所有者
资助类型: - 授权码授予 - 隐式授权 - 客户端凭据授予 - 资源所有者凭据授予
一旦您了解哪种授权类型适合您的情况,您就可以清楚地了解您应该向授权流程的参与者发送和接收哪些请求和响应标头。
有很多关于这个主题的文章,我觉得这一篇特别有用:https://alexbilbie.com/guide-to-oauth-2-grants/
Keycloak 的登录页面在实现 OAuth 协议的授权代码和隐式授权类型时特别有用。
【讨论】:
感谢您的 cmets。在我的情况下,我使用“资源所有者凭据授予”并获取“访问令牌、刷新令牌并过期”作为响应。在此之后是否需要执行任何其他步骤?因为它还是要去Keycloak登录页面。 如果我对您的理解正确,那么您的资源服务器的 Keycloak 适配器配置错误。如果您尝试保护资源,例如 REST 服务,则可以设置 bearer-only 配置参数。它只会验证您从 Keycloak 收到的令牌。 keycloak.org/docs/latest/securing_apps/index.html - 此链接包含配置参数说明和示例链接。 由于我是 SSO 和 Keycloak 的新手,想在这里再问一个问题。我可以这么说,我登录到我的应用程序(比如 application1)。单击应用程序1 中的链接时,我想访问云元素(例如应用程序2)。这里 Keycloak 到 application2,我正在使用 SAML。和 keycloak 的 application1 ,我正在使用 OpenID。这是正确的吗? 这是一个非常宽泛的问题,在不了解细节和应用要求的情况下需要回答。但是 SAML 和 OIDC 是不同的协议,如果您从一开始就设计 SSO 解决方案,那么可能没有必要将这些协议混合在一起。以上是关于访问令牌后的Keycloak授权过程的主要内容,如果未能解决你的问题,请参考以下文章