Keycloak 相关概念

accessToken

accessToken是访问令牌,包含有关用户授权的信息,例如授权范围和过期时间。accessToken是通过OAuth 2.0协议发出的,用于访问受保护的资源。
accessToken的payload:

{
    
    
    "exp": 1693065343,
    "iat": 1693065043,
    "jti": "25a23da2-b2b2-4a41-ac83-58aa48db801b",
    "iss": "http://localhost:8090/realms/realm-01",
    "aud": "account",
    "sub": "648b5f20-3067-434e-84f6-5f916278b3c2",
    "typ": "Bearer",
    "azp": "web-client",
    "session_state": "25934902-72ae-41f4-a6d3-f27e7993d863",
    "acr": "1",
    "allowed-origins": ["/*"],
    "realm_access": {
    
    
        "roles": ["default-roles-realm-01", "offline_access", "uma_authorization"]
    },
    "resource_access": {
    
    
        "account": {
    
    
            "roles": ["manage-account", "manage-account-links", "view-profile"]
        }
    },
    "scope": "openid email profile",
    "sid": "25934902-72ae-41f4-a6d3-f27e7993d863",
    "email_verified": false,
    "preferred_username": "user-001",
    "given_name": "",
    "family_name": ""
}

idToken

idToken是身份令牌,包含有关用户身份验证的信息,例如用户ID和用户名。idToken是通过OpenID Connect协议发出的,用于验证用户身份和授权访问资源。
idToken的payload:

{
    
    
    "exp": 1693065343,
    "iat": 1693065043,
    "auth_time": 0,
    "jti": "9e9800c9-2265-4db5-af83-0079c6d07f0e",
    "iss": "http://localhost:8090/realms/realm-01",
    "aud": "web-client",
    "sub": "648b5f20-3067-434e-84f6-5f916278b3c2",
    "typ": "ID",
    "azp": "web-client",
    "session_state": "25934902-72ae-41f4-a6d3-f27e7993d863",
    "at_hash": "n0Js0LT-eThM1c4nzZpoLg",
    "acr": "1",
    "sid": "25934902-72ae-41f4-a6d3-f27e7993d863",
    "email_verified": false,
    "preferred_username": "user-001",
    "given_name": "",
    "family_name": ""
}

refreshToken

refreshToken的payload:

{
    
    
    "exp": 1693066843,
    "iat": 1693065043,
    "jti": "7bfcd83f-591b-44f7-be5e-c1aac9f0c30a",
    "iss": "http://localhost:8090/realms/realm-01",
    "aud": "http://localhost:8090/realms/realm-01",
    "sub": "648b5f20-3067-434e-84f6-5f916278b3c2",
    "typ": "Refresh",
    "azp": "web-client",
    "session_state": "25934902-72ae-41f4-a6d3-f27e7993d863",
    "scope": "openid email profile",
    "sid": "25934902-72ae-41f4-a6d3-f27e7993d863"
}

JWT Token

JWT-Token是一种轻量级的令牌,用于在不同的应用程序之间传递身份验证和授权信息。
JWT Token可以由服务端或客户端生成,具体取决于应用程序的设计和需求。
客户端生成: 如果应用程序需要在用户登录时生成JWT Token并将其存储在客户端(如浏览器)中,那么客户端将负责生成JWT Token。这种情况下,客户端通常会使用用户的登录凭据(如用户名和密码)来生成JWT Token。
服务端生成: 如果应用程序需要在每次对受保护的资源进行请求时生成JWT Token,那么服务端将负责生成JWT Token。这种情况下,服务端通常会使用应用程序的密钥来生成JWT Token。

Access Token和JWT Token区别:

Access Token和JWT Token都是用于身份验证和授权的令牌,但它们有以下区别:

  1. Access Token是OAuth 2.0协议中的一种令牌,用于访问受保护的资源。它通常由授权服务器颁发,并包含有关令牌持有者和授权的信息。而JWT-Token是一种轻量级的令牌,用于在不同的应用程序之间传递身份验证和授权信息。
  2. Access Token通常是短期的,过期后需要重新获取,而JWT Token可以设置过期时间,也可以使用刷新令牌进行更新。
  3. Access Token通常需要与授权服务器进行交互以验证和更新令牌,而JWT Token可以在不需要与授权服务器交互的情况下进行验证和解码。

客户端的访问类型

访问类型的作用是用于控制客户端的访问权限和安全性。

  • Public
    公开客户端,不需要任何认证即可访问。
    适用于客户端应用,且需要浏览器登录的场景。如:前端web系统。
  • Confidential
    机密客户端,需要提供客户端ID和客户端密钥才能访问。
    适用于服务端应用,且需要浏览器登录以及需要获取access token的场景。如:服务端渲染的web系统。
  • Bearer-only
    仅支持Bearer Token的客户端,用于API服务。
    适用于服务端应用,不需要浏览器登录,只允许使用bearer token请求的场景

Realm 领域

keycloak包含两种领域:

  • master
    这个领域是在你第一次开始Keycloak时为你创建的。 它包含您在第一次登录时创建的管理员帐户。 你使用这个领域只是为了创造其他领域。
  • 其他realm
    这些领域是由主领域中的管理员创建的。 在这些领域中,管理员创建用户和应用程序。 应用程序归用户所有。

猜你喜欢

转载自blog.csdn.net/qq_37597428/article/details/132514149