什么是Keycloak的OAuth2 / OpenID Connect端点?


99

我们正在尝试将Keycloak评估为SSO解决方案,它在许多方面看起来都不错,但是很痛苦地缺少基础文档。

对于在http://localhost:8080/领域上安装的给定Keycloak testOAuth2授权端点OAuth2令牌端点OpenID Connect UserInfo端点是什么?

我们对使用Keycloak自己的客户端库不感兴趣,我们想使用标准的OAuth2 / OpenID Connect客户端库,因为使用keycloak服务器的客户端应用程序将以多种语言编写(PHP,Ruby,Node,Java,C# ,角度)。因此,使用Keycloak客户端的示例对我们没有用。


1
您最终使用了什么?
2013年

1
我们终于能够在楼上说服OAuth与登录和安全无关,因为它是在应用程序本身中使用的一项技术,并且仅与第三方集成有关。很难解释一个事实,即Google&FB到处使用它与我们无关。
阿米尔·阿比里

5
@AmirAbiri不会说它仅用于第三方集成。这是当今的主要用途,但是,如果您要在自己的企业环境中处理多个应用程序(或微服务),并且想要一个SSO解决方案,那么作为越来越多的互联网公司支持的协议也可能有意义。实际上,就我而言,已经使用keycloak超过10个月了,我认为它应该也适用于简单的应用程序,因为它可以处理所有用户管理工作。
Xtreme Biker,2013年

Answers:


129

对于Keycloak 1.2,可以通过url检索上述信息

http:// keycloakhost:keycloakport / auth / realms / {realm} /。well-known / openid-configuration

例如,如果领域名称是demo

http:// keycloakhost:keycloakport / auth / realms / demo / .well-known / openid-configuration

网址上方的示例输出:

{
    "issuer": "http://localhost:8080/auth/realms/demo",
    "authorization_endpoint": "http://localhost:8080/auth/realms/demo/protocol/openid-connect/auth",
    "token_endpoint": "http://localhost:8080/auth/realms/demo/protocol/openid-connect/token",
    "userinfo_endpoint": "http://localhost:8080/auth/realms/demo/protocol/openid-connect/userinfo",
    "end_session_endpoint": "http://localhost:8080/auth/realms/demo/protocol/openid-connect/logout",
    "jwks_uri": "http://localhost:8080/auth/realms/demo/protocol/openid-connect/certs",
    "grant_types_supported": [
        "authorization_code",
        "refresh_token",
        "password"
    ],
    "response_types_supported": [
        "code"
    ],
    "subject_types_supported": [
        "public"
    ],
    "id_token_signing_alg_values_supported": [
        "RS256"
    ],
    "response_modes_supported": [
        "query"
    ]
}

https://issues.jboss.org/browse/KEYCLOAK-571中找到了信息

注意:您可能需要将客户端添加到“有效重定向URI”列表中


1
从那以后,我们已经使用Keycloak丢弃了,所以我无法验证。
阿米尔·阿比里

在Web应用程序上具有登录链接的人将使用哪个URL?U尝试了所有这些,但他们没有这样做
Ced

2
@AmirAbiri您可以替代KeyCloak吗?我目前正在评估。它喜欢UI,并且希望让我的所有用户都可以使用它进行管理,但是我很难将GoLang应用程序添加到其中。
Tarion

@Tarion有一个WSO2身份服务器。
无法

20

在1.9.3.Final版本中,Keycloak具有许多可用的OpenID端点。这些可以在找到/auth/realms/{realm}/.well-known/openid-configuration。假设您的领域名为demo,则该端点将产生与此类似的JSON响应。

{
  "issuer": "http://localhost:8080/auth/realms/demo",
  "authorization_endpoint": "http://localhost:8080/auth/realms/demo/protocol/openid-connect/auth",
  "token_endpoint": "http://localhost:8080/auth/realms/demo/protocol/openid-connect/token",
  "token_introspection_endpoint": "http://localhost:8080/auth/realms/demo/protocol/openid-connect/token/introspect",
  "userinfo_endpoint": "http://localhost:8080/auth/realms/demo/protocol/openid-connect/userinfo",
  "end_session_endpoint": "http://localhost:8080/auth/realms/demo/protocol/openid-connect/logout",
  "jwks_uri": "http://localhost:8080/auth/realms/demo/protocol/openid-connect/certs",
  "grant_types_supported": [
    "authorization_code",
    "implicit",
    "refresh_token",
    "password",
    "client_credentials"
  ],
  "response_types_supported": [
    "code",
    "none",
    "id_token",
    "token",
    "id_token token",
    "code id_token",
    "code token",
    "code id_token token"
  ],
  "subject_types_supported": [
    "public"
  ],
  "id_token_signing_alg_values_supported": [
    "RS256"
  ],
  "response_modes_supported": [
    "query",
    "fragment",
    "form_post"
  ],
  "registration_endpoint": "http://localhost:8080/auth/realms/demo/clients-registrations/openid-connect"
}

据我所知,这些端点实现了Oauth 2.0规范。


请注意,OpenID Connect基本上是一组标准,其中OAuth 2是一个标准(JWT是另一个标准)
Stijn de Witt

2
此评论有些误导。OAuth2是实现授权协议的标准。OIDC是一种在OAuth2之上进行识别的标准。
Thomas Lann


15

经过大量挖掘之后,我们能够或多或少地抓取信息(主要来自Keycloak自己的JS客户端库):

  • 授权端点: /auth/realms/{realm}/tokens/login
  • 令牌端点: /auth/realms/{realm}/tokens/access/codes

至于OpenID Connect UserInfo,目前(1.1.0.Final)Keycloak尚未实现此终结点,因此它不完全符合OpenID Connect。但是,已经有一个补丁程序添加了此文件,此文件应包含在1.2.x中。

但是-具有讽刺意味的是,Keycloak确实将id_tokenin与访问令牌一起发送回。无论是id_tokenaccess_token签署JWTs,以及令牌的键ID连接的密钥,即:

"iss":  "{realm}"
"sub":  "5bf30443-0cf7-4d31-b204-efd11a432659"
"name": "Amir Abiri"
"email: "..."

因此,尽管Keycloak 1.1.x不完全符合OpenID Connect,但它会以OpenID Connect语言“讲话”。


7

在1.9.0版中,所有端点的json位于地址/ auth / realms / {realm}

  • 授权端点: / auth / realms / {realm} / account
  • 令牌端点: / auth / realms / {realm} / protocol / openid-connect

6

您还可以通过进入管理控制台->领域设置->单击“端点”字段上的超链接来查看此信息。

在此处输入图片说明


1
您知道在哪里可以找到这些端点的文档吗?
raarts

您觉得文档对用户友好本来有点
Rohit Kumar

3

密钥斗篷版本:4.6.0

  • 令牌网址:[域] / auth / realms / {REALM_NAME} /协议/ openid-connect / token
  • AuthUrl:[域] / auth / realms / {REALM_NAME} / protocol / openid-connect / auth

是的,这也适用于5.0。他们在这里记载:keycloak.org/docs/5.0/server_admin/...
JP卢

2

FQDN / auth / realms / {realm_name} /。众所周知/ openid配置

您将在此处看到所有内容,此外,如果身份提供者也是Keycloak,则提供此URL将为其他身份提供者(如果他们已经支持并且已经处理过)也设置了所有内容


2

以下链接提供描述有关Keycloak的元数据的JSON文档

/auth/realms/{realm-name}/.well-known/openid-configuration

以下是Keycloak 6.0.1针对master领域报告的信息

{  
   "issuer":"http://localhost:8080/auth/realms/master",
   "authorization_endpoint":"http://localhost:8080/auth/realms/master/protocol/openid-connect/auth",
   "token_endpoint":"http://localhost:8080/auth/realms/master/protocol/openid-connect/token",
   "token_introspection_endpoint":"http://localhost:8080/auth/realms/master/protocol/openid-connect/token/introspect",
   "userinfo_endpoint":"http://localhost:8080/auth/realms/master/protocol/openid-connect/userinfo",
   "end_session_endpoint":"http://localhost:8080/auth/realms/master/protocol/openid-connect/logout",
   "jwks_uri":"http://localhost:8080/auth/realms/master/protocol/openid-connect/certs",
   "check_session_iframe":"http://localhost:8080/auth/realms/master/protocol/openid-connect/login-status-iframe.html",
   "grant_types_supported":[  
      "authorization_code",
      "implicit",
      "refresh_token",
      "password",
      "client_credentials"
   ],
   "response_types_supported":[  
      "code",
      "none",
      "id_token",
      "token",
      "id_token token",
      "code id_token",
      "code token",
      "code id_token token"
   ],
   "subject_types_supported":[  
      "public",
      "pairwise"
   ],
   "id_token_signing_alg_values_supported":[  
      "PS384",
      "ES384",
      "RS384",
      "HS256",
      "HS512",
      "ES256",
      "RS256",
      "HS384",
      "ES512",
      "PS256",
      "PS512",
      "RS512"
   ],
   "userinfo_signing_alg_values_supported":[  
      "PS384",
      "ES384",
      "RS384",
      "HS256",
      "HS512",
      "ES256",
      "RS256",
      "HS384",
      "ES512",
      "PS256",
      "PS512",
      "RS512",
      "none"
   ],
   "request_object_signing_alg_values_supported":[  
      "PS384",
      "ES384",
      "RS384",
      "ES256",
      "RS256",
      "ES512",
      "PS256",
      "PS512",
      "RS512",
      "none"
   ],
   "response_modes_supported":[  
      "query",
      "fragment",
      "form_post"
   ],
   "registration_endpoint":"http://localhost:8080/auth/realms/master/clients-registrations/openid-connect",
   "token_endpoint_auth_methods_supported":[  
      "private_key_jwt",
      "client_secret_basic",
      "client_secret_post",
      "client_secret_jwt"
   ],
   "token_endpoint_auth_signing_alg_values_supported":[  
      "RS256"
   ],
   "claims_supported":[  
      "aud",
      "sub",
      "iss",
      "auth_time",
      "name",
      "given_name",
      "family_name",
      "preferred_username",
      "email"
   ],
   "claim_types_supported":[  
      "normal"
   ],
   "claims_parameter_supported":false,
   "scopes_supported":[  
      "openid",
      "address",
      "email",
      "microprofile-jwt",
      "offline_access",
      "phone",
      "profile",
      "roles",
      "web-origins"
   ],
   "request_parameter_supported":true,
   "request_uri_parameter_supported":true,
   "code_challenge_methods_supported":[  
      "plain",
      "S256"
   ],
   "tls_client_certificate_bound_access_tokens":true,
   "introspection_endpoint":"http://localhost:8080/auth/realms/master/protocol/openid-connect/token/introspect"
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.