目录
欢迎关注微信公众号:数据科学与艺术 作者WX:superhe199
Keycloak概述
Keycloak是一个开源的身份和访问管理解决方案,它提供了OIDC(OpenID Connect)、OAuth 2.0和SAML 2.0等通用认证和授权协议的支持。下面将解释这些概念和相关知识。
OIDC(OpenID Connect)是一个构建在OAuth 2.0之上的认证协议,它允许用户使用一个统一的身份标识(OpenID)进行身份验证和授权。OIDC在OAuth 2.0的基础上添加了身份验证的能力,使得应用程序可以获得用户信息,并且可以验证这些信息的真实性。Keycloak使用OIDC作为默认的认证协议。
OAuth 2.0是一个用于授权的开放标准协议,它允许应用程序通过授权服务器获取访问权限。在OAuth 2.0中,用户可以授权第三方应用程序代表自己访问受保护的资源,而无需将其密码分享给第三方应用程序。Keycloak支持OAuth 2.0协议,允许应用程序通过Keycloak获取访问令牌(access token)来访问受保护的资源。
SSO(Single Sign-On)是一种身份认证机制,允许用户使用一组凭据(例如用户名和密码)登录到一个系统,并且可以在同一个会话中无需重新认证访问其他系统。Keycloak提供了SSO的能力,使得用户只需要登录一次就可以访问多个应用程序。
Keycloak是由Jboss开发的,它使用Java编写,并提供了基于Web界面的管理和配置工具。Keycloak的源代码可以在GitHub上找到,你可以在这里查看和修改源代码以满足自己的需求。
通过使用Keycloak作为统一认证中心,可以快速搭建一个支持通用协议(OIDC、OAuth等)的单点登录解决方案,以实现用户的登录、认证和授权。
具体源码可参见:https://github.com/keycloak/keycloak
启动
命令bin/standalone.bat
这个8080端口可以通过修改standalone/configuration/standalone.xml文件进行重置
Calling “C:\keycloak-15.0.2\bin\standalone.conf.bat”
Setting JAVA property to “C:\Program Files\Java\jdk-21\bin\java”
JBoss Bootstrap Environment
JBOSS_HOME: “C:\keycloak-15.0.2”
JAVA: “C:\Program Files\Java\jdk-21\bin\java”
JAVA_OPTS: “-Dprogram.name=standalone.bat -Xms64M -Xmx512M -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED --add-exports=jdk.unsupported/sun.reflect=ALL-UNNAMED”
===============================================================================
13:43:22,099 INFO [org.jboss.modules] (main) JBoss Modules version 1.11.0.Final
13:43:22,689 INFO [org.jboss.msc] (main) JBoss MSC version 1.4.12.Final
13:43:22,696 INFO [org.jboss.threads] (main) JBoss Threads version 2.4.0.Final
13:43:22,798 INFO [org.jboss.as] (MSC service thread 1-2) WFLYSRV0049: Keycloak 15.0.2 (WildFly Core 15.0.1.Final) starting
13:43:23,390 INFO [org.wildfly.security] (ServerService Thread Pool – 20) ELY00001: WildFly Elytron version 1.15.3.Final
13:43:23,675 INFO [org.jboss.as.controller.management-deprecated] (ServerService Thread Pool – 7) WFLYCTL0033: Extension ‘security’ is deprecated and may not be supported in future versions
13:43:23,976 INFO [org.jboss.as.controller.management-deprecated] (Controller Boot Thread) WFLYCTL0028: Attribute ‘security-realm’ in the resource at address ‘/core-service=management/management-interface=http-interface’ is deprecated, and may be removed in a future version. See the attribute description in the output of the read-resource-description operation to learn more about the deprecation.
13:43:23,987 INFO [org.jboss.as.controller.management-deprecated] (ServerService Thread Pool – 16) WFLYCTL0028: Attribute ‘security-realm’ in the resource at address ‘/subsystem=undertow/server=default-server/https-listener=https’ is deprecated, and may be removed in a future version. See the attribute description in the output of the read-resource-description operation to learn more about the deprecation.
13:43:24,073 INFO [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0039: Creating http management service using socket-binding (management-http)
13:43:24,121 INFO [org.xnio] (MSC service thread 1-8) XNIO version 3.8.4.Final
13:43:24,128 INFO [org.xnio.nio] (MSC service thread 1-8) XNIO NIO Implementation Version 3.8.4.Final
13:43:24,160 WARN [org.jboss.as.txn] (ServerService Thread Pool – 51) WFLYTX0013: The node-identifier attribute on the /subsystem=transactions is set to the default value. This is a danger for environments running multiple servers. Please make sure the attribute value is unique.
13:43:24,161 INFO [org.jboss.as.jaxrs] (ServerService Thread Pool – 39) WFLYRS0016: RESTEasy version 3.15.1.Final
13:43:24,162 INFO [org.wildfly.extension.health] (ServerService Thread Pool – 36) WFLYHEALTH0001: Activating Base Health Subsystem
13:43:24,166 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool – 37) WFLYCLINF0001: Activating Infinispan subsystem.
13:43:24,181 INFO [org.wildfly.extension.metrics] (ServerService Thread Pool – 45) WFLYMETRICS0001: Activating Base Metrics Subsystem
13:43:24,182 INFO [org.jboss.as.security] (ServerService Thread Pool – 49) WFLYSEC0002: Activating Security Subsystem
13:43:24,189 INFO [org.jboss.as.security] (MSC service thread 1-7) WFLYSEC0001: Current PicketBox version=5.0.3.Final-redhat-00007
13:43:24,190 INFO [org.jboss.as.naming] (ServerService Thread Pool – 46) WFLYNAM0001: Activating Naming Subsystem
13:43:24,198 INFO [org.jboss.as.connector] (MSC service thread 1-3) WFLYJCA0009: Starting Jakarta Connectors Subsystem (WildFly/IronJacamar 1.4.27.Final)
13:43:24,231 INFO [org.wildfly.extension.io] (ServerService Thread Pool – 38) WFLYIO001: Worker ‘default’ has auto-configured to 32 IO threads with 256 max task threads based on your 16 available processors
13:43:24,240 INFO [org.wildfly.extension.undertow] (MSC service thread 1-2) WFLYUT0003: Undertow 2.2.5.Final starting
13:43:24,285 WARN [org.wildfly.clustering.web.undertow] (ServerService Thread Pool – 52) WFLYCLWEBUT0007: No routing provider found for default-server; using legacy provider based on static configuration
13:43:24,300 INFO [org.jboss.as.naming] (MSC service thread 1-3) WFLYNAM0003: Starting Naming Service
13:43:24,300 INFO [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool – 31) WFLYJCA0004: Deploying JDBC-compliant driver class org.h2.Driver (version 1.4)
13:43:24,305 INFO [org.jboss.as.mail.extension] (MSC service thread 1-6) WFLYMAIL0001: Bound mail session [java:jboss/mail/Default]
13:43:24,322 WARN [org.wildfly.extension.elytron] (MSC service thread 1-2) WFLYELY00023: KeyStore file ‘C:\keycloak-15.0.2\standalone\configuration\application.keystore’ does not exist. Used blank.
13:43:24,373 INFO [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-2) WFLYJCA0018: Started Driver service with driver-name = h2
13:43:24,433 WARN [org.wildfly.extension.elytron] (MSC service thread 1-4) WFLYELY01084: KeyStore C:\keycloak-15.0.2\standalone\configuration\application.keystore not found, it will be auto generated on first use with a self-signed certificate for host localhost
13:43:24,445 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool – 52) WFLYUT0014: Creating file handler for path ‘C:\keycloak-15.0.2/welcome-content’ with options [directory-listing: ‘false’, follow-symlink: ‘false’, case-sensitive: ‘true’, safe-symlink-paths: ‘[]’]
13:43:24,451 INFO [org.jboss.remoting] (MSC service thread 1-2) JBoss Remoting version 5.0.20.Final
13:43:24,539 INFO [org.wildfly.extension.undertow] (MSC service thread 1-3) WFLYUT0012: Started server default-server.
13:43:24,547 INFO [org.wildfly.extension.undertow] (MSC service thread 1-2) Queuing requests.
13:43:24,553 INFO [org.wildfly.extension.undertow] (MSC service thread 1-2) WFLYUT0018: Host default-host starting
13:43:24,579 INFO [org.jboss.as.ejb3] (MSC service thread 1-6) WFLYEJB0481: Strict pool slsb-strict-max-pool is using a max instance size of 256 (per class), which is derived from thread worker pool sizing.
13:43:24,579 INFO [org.jboss.as.ejb3] (MSC service thread 1-8) WFLYEJB0482: Strict pool mdb-strict-max-pool is using a max instance size of 64 (per class), which is derived from the number of CPUs on this host.
13:43:24,673 INFO [org.wildfly.extension.undertow] (MSC service thread 1-5) WFLYUT0006: Undertow HTTP listener default listening on 127.0.0.1:8080
13:43:24,776 INFO [org.jboss.as.ejb3] (MSC service thread 1-4) WFLYEJB0493: Jakarta Enterprise Beans subsystem suspension complete
13:43:24,787 INFO [org.jboss.as.patching] (MSC service thread 1-5) WFLYPAT0050: Keycloak cumulative patch ID is: base, one-off patches include: none
13:43:24,796 WARN [org.jboss.as.domain.management.security] (MSC service thread 1-3) WFLYDM0111: Keystore C:\keycloak-15.0.2\standalone\configuration\application.keystore not found, it will be auto generated on first use with a self signed certificate for host localhost
13:43:24,801 INFO [org.jboss.as.server.deployment.scanner] (MSC service thread 1-3) WFLYDS0013: Started FileSystemDeploymentService for directory C:\keycloak-15.0.2\standalone\deployments
13:43:24,822 INFO [org.jboss.as.server.deployment] (MSC service thread 1-1) WFLYSRV0027: Starting deployment of “keycloak-server.war” (runtime-name: “keycloak-server.war”)
13:43:24,849 INFO [org.wildfly.extension.undertow] (MSC service thread 1-3) WFLYUT0006: Undertow HTTPS listener https listening on 127.0.0.1:8443
13:43:24,860 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-2) WFLYJCA0001: Bound data source [java:jboss/datasources/KeycloakDS]
13:43:24,860 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-1) WFLYJCA0001: Bound data source [java:jboss/datasources/ExampleDS]
13:43:26,042 INFO [org.infinispan.CONTAINER] (ServerService Thread Pool – 54) ISPN000128: Infinispan version: Infinispan ‘Corona Extra’ 11.0.9.Final
13:43:26,138 INFO [org.infinispan.CONFIG] (MSC service thread 1-6) ISPN000152: Passivation configured without an eviction policy being selected. Only manually evicted entities will be passivated.
13:43:26,139 INFO [org.infinispan.CONFIG] (MSC service thread 1-6) ISPN000152: Passivation configured without an eviction policy being selected. Only manually evicted entities will be passivated.
13:43:26,233 INFO [org.infinispan.PERSISTENCE] (ServerService Thread Pool – 54) ISPN000556: Starting user marshaller ‘org.wildfly.clustering.infinispan.spi.marshalling.InfinispanProtoStreamMarshaller’
13:43:26,234 INFO [org.infinispan.PERSISTENCE] (ServerService Thread Pool – 55) ISPN000556: Starting user marshaller ‘org.wildfly.clustering.infinispan.marshalling.jboss.JBossMarshaller’
13:43:26,496 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool – 54) WFLYCLINF0002: Started http-remoting-connector cache from ejb container
13:43:26,543 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool – 55) WFLYCLINF0002: Started authenticationSessions cache from keycloak container
13:43:26,543 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool – 56) WFLYCLINF0002: Started offlineSessions cache from keycloak container
13:43:26,543 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool – 57) WFLYCLINF0002: Started work cache from keycloak container
13:43:26,543 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool – 64) WFLYCLINF0002: Started offlineClientSessions cache from keycloak container
13:43:26,543 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool – 59) WFLYCLINF0002: Started sessions cache from keycloak container
13:43:26,543 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool – 61) WFLYCLINF0002: Started clientSessions cache from keycloak container
13:43:26,543 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool – 60) WFLYCLINF0002: Started loginFailures cache from keycloak container
13:43:26,543 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool – 66) WFLYCLINF0002: Started actionTokens cache from keycloak container
13:43:26,588 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool – 63) WFLYCLINF0002: Started authorization cache from keycloak container
13:43:26,588 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool – 65) WFLYCLINF0002: Started keys cache from keycloak container
13:43:26,588 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool – 62) WFLYCLINF0002: Started realms cache from keycloak container
13:43:26,588 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool – 58) WFLYCLINF0002: Started users cache from keycloak container
13:43:26,687 WARN [org.jboss.as.server.deployment] (MSC service thread 1-7) WFLYSRV0273: Excluded subsystem webservices via jboss-deployment-structure.xml does not exist.
13:43:27,362 INFO [org.keycloak.services] (ServerService Thread Pool – 54) KC-SERVICES0001: Loading config from standalone.xml or domain.xml
13:43:27,550 INFO [org.keycloak.url.DefaultHostnameProviderFactory] (ServerService Thread Pool – 54) Frontend: , Admin: , Backend:
13:43:27,824 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool – 54) WFLYCLINF0002: Started realmRevisions cache from keycloak container
13:43:27,828 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool – 54) WFLYCLINF0002: Started userRevisions cache from keycloak container
13:43:27,834 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool – 54) WFLYCLINF0002: Started authorizationRevisions cache from keycloak container
13:43:27,835 INFO [org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory] (ServerService Thread Pool – 54) Node name: laptop-cta8h54q, Site name: null
13:43:28,603 INFO [org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory] (ServerService Thread Pool – 54) Database info: {databaseUrl=jdbc:h2:C:\keycloak-15.0.2\standalone\data/keycloak, databaseUser=SA, databaseProduct=H2 1.4.197 (2018-03-18), databaseDriver=H2 JDBC Driver 1.4.197 (2018-03-18)}
13:43:29,916 INFO [org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterProvider] (ServerService Thread Pool – 54) Initializing database schema. Using changelog META-INF/jpa-changelog-master.xml
13:43:31,237 INFO [org.hibernate.jpa.internal.util.LogHelper] (ServerService Thread Pool – 54) HHH000204: Processing PersistenceUnitInfo [
name: keycloak-default
…]
13:43:31,351 INFO [org.hibernate.Version] (ServerService Thread Pool – 54) HHH000412: Hibernate Core {5.3.20.Final}
13:43:31,353 INFO [org.hibernate.cfg.Environment] (ServerService Thread Pool – 54) HHH000206: hibernate.properties not found
13:43:31,523 INFO [org.hibernate.annotations.common.Version] (ServerService Thread Pool – 54) HCANN000001: Hibernate Commons Annotations {5.0.5.Final}
13:43:31,688 INFO [org.hibernate.dialect.Dialect] (ServerService Thread Pool – 54) HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
13:43:31,736 INFO [org.hibernate.envers.boot.internal.EnversServiceImpl] (ServerService Thread Pool – 54) Envers integration enabled? : true
13:43:32,110 INFO [org.hibernate.orm.beans] (ServerService Thread Pool – 54) HHH10005002: No explicit CDI BeanManager reference was passed to Hibernate, but CDI is available on the Hibernate ClassLoader.
13:43:32,157 INFO [org.hibernate.validator.internal.util.Version] (ServerService Thread Pool – 54) HV000001: Hibernate Validator 6.0.22.Final
13:43:33,048 INFO [org.hibernate.hql.internal.QueryTranslatorFactoryInitiator] (ServerService Thread Pool – 54) HHH000397: Using ASTQueryTranslatorFactory
13:43:33,463 INFO [org.keycloak.services] (ServerService Thread Pool – 54) KC-SERVICES0050: Initializing master realm
13:43:34,564 INFO [org.jboss.resteasy.resteasy_jaxrs.i18n] (ServerService Thread Pool – 54) RESTEASY002225: Deploying javax.ws.rs.core.Application: class org.keycloak.services.resources.KeycloakApplication
13:43:34,567 INFO [org.jboss.resteasy.resteasy_jaxrs.i18n] (ServerService Thread Pool – 54) RESTEASY002200: Adding class resource org.keycloak.services.resources.JsResource from Application class org.keycloak.services.resources.KeycloakApplication
13:43:34,568 INFO [org.jboss.resteasy.resteasy_jaxrs.i18n] (ServerService Thread Pool – 54) RESTEASY002200: Adding class resource org.keycloak.services.resources.ThemeResource from Application class org.keycloak.services.resources.KeycloakApplication
13:43:34,568 INFO [org.jboss.resteasy.resteasy_jaxrs.i18n] (ServerService Thread Pool – 54) RESTEASY002205: Adding provider class org.keycloak.services.error.KeycloakErrorHandler from Application class org.keycloak.services.resources.KeycloakApplication
13:43:34,569 INFO [org.jboss.resteasy.resteasy_jaxrs.i18n] (ServerService Thread Pool – 54) RESTEASY002205: Adding provider class org.keycloak.services.filters.KeycloakSecurityHeadersFilter from Application class org.keycloak.services.resources.KeycloakApplication
13:43:34,569 INFO [org.jboss.resteasy.resteasy_jaxrs.i18n] (ServerService Thread Pool – 54) RESTEASY002220: Adding singleton resource org.keycloak.services.resources.admin.AdminRoot from Application class org.keycloak.services.resources.KeycloakApplication
13:43:34,569 INFO [org.jboss.resteasy.resteasy_jaxrs.i18n] (ServerService Thread Pool – 54) RESTEASY002220: Adding singleton resource org.keycloak.services.resources.RobotsResource from Application class org.keycloak.services.resources.KeycloakApplication
13:43:34,569 INFO [org.jboss.resteasy.resteasy_jaxrs.i18n] (ServerService Thread Pool – 54) RESTEASY002220: Adding singleton resource org.keycloak.services.resources.RealmsResource from Application class org.keycloak.services.resources.KeycloakApplication
13:43:34,569 INFO [org.jboss.resteasy.resteasy_jaxrs.i18n] (ServerService Thread Pool – 54) RESTEASY002220: Adding singleton resource org.keycloak.services.resources.WelcomeResource from Application class org.keycloak.services.resources.KeycloakApplication
13:43:34,569 INFO [org.jboss.resteasy.resteasy_jaxrs.i18n] (ServerService Thread Pool – 54) RESTEASY002210: Adding provider singleton org.keycloak.services.util.ObjectMapperResolver from Application class org.keycloak.services.resources.KeycloakApplication
13:43:34,632 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool – 54) WFLYUT0021: Registered web context: ‘/auth’ for server ‘default-server’
13:43:34,682 INFO [org.jboss.as.server] (ServerService Thread Pool – 43) WFLYSRV0010: Deployed “keycloak-server.war” (runtime-name : “keycloak-server.war”)
13:43:34,740 INFO [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0212: Resuming server
13:43:34,744 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: Keycloak 15.0.2 (WildFly Core 15.0.1.Final) started in 13030ms - Started 594 of 872 services (584 services are lazy, passive or on-demand)
13:43:34,747 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Http management interface listening on http://127.0.0.1:9990/management
13:43:34,747 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://127.0.0.1:9990
13:46:41,375 INFO [org.keycloak.services] (default task-1) KC-SERVICES0077: Created initial admin user with username ad
启动成功
新建realm
登录进去
Administration Console(http://localhost:8080/auth/admin)
新建realm
realm领域,即用户池的概念,即realm下可以新建多个client(客户端,即需要认证的应用),
即在同一个realm下的不同client可以共享realm下的用户信息,
也就是说我们realm下的同一个用户可以在realm下的不同client进行登录(SSO)。
在Keycloak中创建一个新的客户端,以下步骤操作:
- 登录到 Keycloak 管理控制台。通常,默认的 URL 是
http://localhost:8080/auth/admin
,但可能在您的配置中有所不同。 - 在左侧导航栏中,选择 “Clients”(客户端)。
- 点击右上角的 “Create”(创建)按钮。
- 在 “Client ID”(客户端标识符)字段中,输入一个唯一的标识符,用于标识您的客户端。
- 在 “Client Protocol”(客户端协议)字段中,选择要使用的协议,如 “openid-connect” 或 “saml”。
- 单击 “Save”(保存)按钮来保存客户端。
- 在左侧导航栏中,选择 “Clients”(客户端)。
- 在客户端列表中找到您刚刚创建的客户端,并单击它。
- 在客户端配置页面中,配置您的客户端的其他属性,包括重定向 URL、访问令牌的有效期等。
- 确保保存您的更改。
新建用户
选中新建的realm,然后点击左侧菜单Manage -> Users -> 右上角按钮Add user
设置密码
之后便可以进入Account Console(http://localhost:8080/auth/realms/myrealm/account/#/),用新创建的用户登录后,用户即可进行账户信息的管理
http://localhost:8080/auth/realms/devrealm/account/#/
设置客户端
设置client为confidential(即需要clientId+clientSecret进行验证)
访问
http://localhost:8080/auth/realms/devrealm/.well-known/uma2-configuration
返回
{"issuer":"http://127.0.0.1:8080/realms/devrealm","authorization_endpoint":"http://127.0.0.1:8080/realms/devrealm/protocol/openid-connect/auth","token_endpoint":"http://localhost:8080/auth/realms/devrealm/protocol/openid-connect/token","introspection_endpoint":"http://localhost:8080/auth/realms/devrealm/protocol/openid-connect/token/introspect","end_session_endpoint":"http://127.0.0.1:8080/realms/devrealm/protocol/openid-connect/logout","jwks_uri":"http://localhost:8080/auth/realms/devrealm/protocol/openid-connect/certs","grant_types_supported":["authorization_code","implicit","refresh_token","password","client_credentials","urn:ietf:params:oauth:grant-type:device_code","urn:openid:params:grant-type:ciba"],"response_types_supported":["code","none","id_token","token","id_token token","code id_token","code token","code id_token token"],"response_modes_supported":["query","fragment","form_post","query.jwt","fragment.jwt","form_post.jwt","jwt"],"registration_endpoint":"http://localhost:8080/auth/realms/devrealm/clients-registrations/openid-connect","token_endpoint_auth_methods_supported":["private_key_jwt","client_secret_basic","client_secret_post","tls_client_auth","client_secret_jwt"],"token_endpoint_auth_signing_alg_values_supported":["PS384","ES384","RS384","HS256","HS512","ES256","RS256","HS384","ES512","PS256","PS512","RS512"],"scopes_supported":["openid","address","email","phone","profile","roles","microprofile-jwt","offline_access","web-origins"],"resource_registration_endpoint":"http://127.0.0.1:8080/realms/devrealm/authz/protection/resource_set","permission_endpoint":"http://127.0.0.1:8080/realms/devrealm/authz/protection/permission","policy_endpoint":"http://127.0.0.1:8080/realms/devrealm/authz/protection/uma-policy"}
版权归原作者 贺公子之数据科学与艺术 所有, 如有侵权,请联系我们删除。