在进行一些小游戏开发时,我们比较关注的一个功能便是分享。我们希望能根据各个城市或者地区,能有不同的分享文案,辨识地区的功能如果由服务器来完成的话,我们就需要知道客户端的真实IP。...今天我们就来看看服务器是如何获取到客户端的真实IP的。 nginx配置 首先,一个请求肯定是可以分为请求头和请求体的,而我们客户端的IP地址信息一般都是存储在请求头里的。...web服务器之间增加了中间层,因此web服务器无法直接拿到客户端的ip,通过$remote_addr变量拿到的将是反向代理服务器的ip地址。...这句话的意思是说,当你使用了nginx反向服务器后,在web端使用 request.getRemoteAddr()(本质上就是获取 $remote_addr),取得的是nginx的地址,即 $remote_addr...也就是说在默认情况下我们使用 request.getAttribute("X-Forwarded-For")获取不到用户的ip,如果我们想要通过这个变量获得用户的ip,我们需要自己在nginx添加配置:
而 Keycloak Admin Client正是对Keycloak Admin REST API的Java HTTP客户端封装。...它是 JAX-RS(Java API for RESTful Web Services) 的一个实现,它的一些亮点: 不需要配置文件,基于注解和Java POJO就可以实现RESTful客户端。...根据Token中携带的权限信息来获取对应API的访问权限。所以我们在使用Keycloak Admin Client时要特别注意当前你使用的客户端是否有权限访问。...Setting选项下打开Direct Access Grants Enabled,这意味着admin-cli客户端能够访问用户的用户名和密码,并以此从Keycloak服务器获取访问令牌,继而能够进行进一步的访问授权操作...开启服务账户功能 这样我们可以直接向Keycloak服务器获取realm-management的访问凭据,因为realm-management有全部的管理功能,所以我们可以以客户端的名义而非管理用户的名义创建新用户了
realm Keycloak领域名称,这是一个必须项。 resource 应用的client_id,Keycloak服务器上注册的每个客户端都有一个独一无二的标识。这是一个必须项。...use-resource-role-mappings 如果设置为true, Keycloak Adapter将检查令牌携带的用户角色是否跟资源一致;否则会去查询realm中用户的角色。...autodetect-bearer-only 如果你的应用不仅仅是Web应用而且还提供API服务(现在通常是Restful Service),开启了这一配置后Keycloak服务器会通过请求标头相对“智能...expose-token JavaScript CORS 请求通过根路径下/k_query_bearer_token用来从服务器获取令牌的,好像是nodejs相关的后端应用使用的东西,我折腾了半天没有调用成功...总结 上面列举了大部分我们常用的属性,后面的属性和定制Keycloak服务器相关暂时不介绍了。Keycloak剩下的配置项可以到Keycloak Java适配器配置项[1]查看。
7.API Server 确认用户是否有操作资源的权限。 8.鉴权成功之后,API 服务器向 kubectl 返回响应。 9.kubectl 向用户返回结果。...客户端(clients):需要接入 Keycloak 实现用户认证的应用和服务。 用户(users):用户是能够登录到应用系统的实体,拥有相关的属性,例如电子邮件、用户名、地址、电话号码和生日等等。...6.3 创建 Client Client (客户端)是请求 Keycloak 对用户进行身份验证的客户端,在本示例场景中,API Server 相当于一个客户端,负责向 Keycloak 发起身份认证请求...--oidc-client-id:客户端 ID。 --oidc-username:从 JWT Claim 中获取用户名的字段。...password 表示以密码的方式获取令牌。 client_id:客户端 ID。 client_secret:客户端密钥。 username:用户名。 password:密码。
Keycloak是什么? Keycloak是一种面向现代应用程序和服务的开源的IAM(身份识别与访问管理)解决方案。...Keycloak提供了单点登录(SSO)、Identity Brokering和社交账号登录、User Federation、客户端适配器、管理控制台和帐户管理控制台等特性。...创建一个客户端 现在我们将导航到Clients页面。正如我们在下图中所看到的,Keycloak已经整合了已经内置的客户端: 我们需要在应用程序中添加一个客户端,所以我们点击“Create”。...的值为验证服务器的URL,并且配置了在Keycloak管理控制台中创建的realm。...控制器 为了获取到当前用户的用户名,我们需要在控制器注入Principal参数,修改后的代码如下所示: @GetMapping(path = "/customers") public String customers
创建完用户之后,就可以登录了,用户和管理员的登录地址并不相同,我们可以在客户端页面中查看到地址; ?...(A)客户端将用户导向认证服务器; (B)用户在认证服务器进行登录并授权; (C)认证服务器返回授权码给客户端; (D)客户端通过授权码和跳转地址向认证服务器获取访问令牌; (E)认证服务器发放访问令牌...(A)客户端从用户获取用户名和密码; (B)客户端通过用户的用户名和密码访问认证服务器; (C)认证服务器返回访问令牌(有需要带上刷新令牌)。...一切准备就绪,在Postman中使用Oauth2的方式调用接口就可以获取到Token了,获取token的地址:http://192.168.7.142:8080/auth/realms/macrozheng...登录成功后,即可访问被保护的Swagger页面和API接口,一个很标准的Oauth2的授权码模式,流程参考授权码模式的说明即可。 ?
这里可以创建用户和即将使用 Keycloak 进行单点登录的应用程序。 注意登录管理控制台和服务用户登录是各自独立的。 在 Keycloak 中我们可以创建多个 realms,代表不同的认证服务。...这个工具提供一个代理服务器来管理 OIDC 认证,用户连接到这个代理服务器时,服务会给通过认证的用户提供所需的权限。这种方法是通用的,也就是说我们可以用同样的方法来管理所有的托管和非托管集群。...缺省情况下,被认证应用是不能访问这个 Token 的,要获取认证用户的信息,或者该用户所属的群组,要获取这些信息,需要设置 nginx.ingress.kubernetes.io/auth-response-headers...这样后端应用就能够获取 Header,并解码 JWT 来获取用户的相关信息。 在这个简单的例子里,会把这些信息输出到日志里(不安全),并把信息响应给用户。...而密码不应该使用 Keycloak 的密码,而是从 Harbor 获取,在用户页面右上角选择 User Profile,在其中拷贝 CLI 密码。
Keycloak对流行的Java应用提供了适配器。在系列文章的上一篇我们演示了针对Spring Boot的安全保护,用的就是适配器的一种。...Keycloak支持的每个Java适配器都可以通过一个简单的JSON文件进行配置,我们缺失的就是这个文件。.../(.*)$" : "/api/$1" } } 上面包含的客户端配置属性都可以在Keycloak控制台进行配置,见下图: 配置Keycloak客户端属性 也就是说我们需要的json文件和图中的配置项是对应的...applicaiton.yaml: keycloak: # 声明客户端所在的realm realm: felord.cn # keycloak授权服务器的地址 auth-server-url:...在原生情况下,客户端的配置、用户的信息、角色信息都由Keycloak负责;客户端只负责角色和资源的映射关系。后续会深入并定制Keycloak和Spring Security以满足实际场景需要。
简单来说,以google授权为例,一般就是通过用户授权页面登录google账号,再跳转用code换取到相应权限的token,就可以代表用户去发起一些google api的请求。...+keycloak,但从服务启动到keycloak服务及相关配置,都用docker-compose+terraform+shell 脚本化管理,可 100%本地复刻,欢迎本地尝试。...这里auth url默认跳转的是keycloak登录页面,然后google idp是作为一种登录选项让用户选择。但如果就打算让用户直接google登录,可以跳过keycloak登录页。...有些场景是客户端需要自己通过google refresh token换取access token来发起请求的,难道这个时候客户端先去拿个keycloak access token么。。。?...题外话:当然直接给用户这么获取refresh token的能力并不安全,还需要考虑对broker read token接口的访问约束等来更好的保证安全token换取。
、客户端库方式对REST API的访问,Kubernetes的普通账户和Service帐户都可以实现授权访问API。...这样做的好处也显而易见,用户账户信息与Kubernetes集群松耦合,便于集成企业已有的身份认证系统,如AD、LADP、Keycloak等。...普通帐户是针对(人)用户的,服务账户针对Pod进程。 普通帐户是全局性。在集群所有namespaces中,名称具有惟一性。 通常,群集的普通帐户可以与企业数据库同步,新的普通帐户创建需要特殊权限。...服务账户创建目的是更轻量化,允许集群用户为特定任务创建服务账户。 普通帐户和服务账户的审核注意事项不同。 对于复杂系统的配置包,可以包括对该系统的各种组件的服务账户的定义。...在整个过程中, Kubernetes 既作为资源(Resource)服务器,又作为用户代理 User-Agent 存在,但它并不提供引导用户到 Auth Server 进行认证的功能,相反,它要求用户先自行获取
最后,在我们开始之前,请将Java SE的安全编码指南作为您团队中任何Java开发人员的必读内容。此外,Java SE平台官方文档包括了所有与Java安全性相关的规范、指南和api的良好摘要。...四.身份验证和授权(Authentication and Authorization) 识别各种可能的参与者(用户,服务,合作伙伴和外部系统)以及允许他们在系统中做什么是确保微服务安全的另一个方面。...它允许客户端基于授权服务器执行的身份验证来验证最终用户的身份,并以可互操作且类似于REST的方式获取有关最终用户的基本配置文件信息-https://openid.net/connect/ 这两个标准与JSON...Keycloak是针对现代应用程序和服务的开源身份和访问管理解决方案。 它使您几乎不需要代码即可轻松保护应用程序和服务。...尽管如此,许多组织仍然将配置存储在服务附近的配置文件中,甚至硬编码在代码中。更糟糕的是,此类配置通常包含敏感信息,例如访问数据存储、服务帐户或加密密钥的凭据。这类资料属于机密,绝不能公开泄露。
每个Realm有自己的用户、组、角色、客户端等,彼此完全隔离。在实际项目中,你可能会为不同的应用或环境创建不同的Realm。例如,我通常会为开发环境、测试环境和生产环境分别创建Realm。...Client可以是各种类型:- 浏览器应用- 移动应用- REST服务- 其他Keycloak服务器等User(用户)这个概念很直观,就是系统中的用户账户。...现在我们可以在这个Realm中创建用户、客户端等。...跨域(CORS)问题问题:前端应用调用Keycloak API时遇到CORS错误。...会话超时设置问题:用户会话过快过期或持续时间过长。解决:在Realm设置的"Sessions"标签页调整SSO会话最大时长和客户端会话空闲超时。
登录及身份认证是现代web应用最基本的功能之一,对于企业内部的系统,多个系统往往希望有一套SSO服务对企业用户的登录及身份认证进行统一的管理,提升用户同时使用多个系统的体验,Keycloak正是为此种场景而生...这里先只介绍4个最常用的核心概念: Users: 用户,使用并需要登录系统的对象 Roles: 角色,用来对用户的权限进行管理 Clients: 客户端,需要接入Keycloak并被Keycloak...保护的应用和服务 Realms: 领域,领域管理着一批用户、证书、角色、组等,一个用户只能属于并且能登陆到一个域,域之间是互相独立隔离的, 一个域只能管理它下面所属的用户 Keycloak服务安装及配置...事实上,Keycloak目前的访问类型共有3种: confidential:适用于服务端应用,且需要浏览器登录以及需要通过密钥获取access token的场景。...bearer-only:适用于服务端应用,不需要浏览器登录,只允许使用bearer token请求的场景。典型的使用场景就是restful api。
(第三方软件外部用)auth_url:浏览器访问时,第三方软件(Grafana)靠此url使用户浏览器转向Keycloak的认证登录界面,用户在Keycloak登录成功后,keycloak会生成一个针对该用户的...(第三方软件内部用)api_url:第三方软件内部使用api_url,以及上一步的access_token与keycloak通信,获取这个用户的详细信息后,内部注册用户并存储session,最后将浏览器重定向到第三方软件首页...,点击登录,认证成功后 #该请求的responseHeader看出,keycloak登录成功,客户端可以转向grafana了,并给予了keycloak的code http://localhost:3000...通信,用code换回accesstoken #有了accesstoken后,遂向keycloak,发起api_url的请求,获取用户身份 #此时存入自己管理的用户session #然后返回 #response...header里,设置浏览器的grafana cookie,说明grafana已经将keycloak的code验证登录后,生成了该客户端的grafana_session Set-Cookie: oauth_state
load balancing负载均衡 因为是集群结构,所以我们后端是有多台服务器的,那么用户通过客户端来访问我们服务的时候,究竟应该定位到哪一台服务器呢?...一般来说三种负载均衡的方式: 第一种,就是客户端负载均衡,客户端已经知道了服务端的多个服务地址,在发送请求的时候由客户端自行选择要请求的服务地址。...这种模式一般都要配置一个强力的客户端API,通过这个客户端API来进行路由功能,比如说Memcached。 Memcached的神奇来自两阶段哈希(two-stagehash)。...我们在特定的业务中需要获取到用户的ip地址来进行一些操作,比如记录用户的操作日志,如果不能够获取到真实的ip地址的话,则可能使用错误的ip地址。还有就是根据ip地址进行的认证或者防刷工作。...然后服务器端就可以从X-Forwarded-For获取到客户的真实ip地址了。
步骤 1:配置身份提供商(Keycloak)在 Keycloak 实例里,得把 DolphinScheduler 注册成新客户端。...要加上 DolphinScheduler API 服务器的回调 URL,格式是 http://{api - host:port}/dolphinscheduler/login/oauth2/code/{...获取凭证:到 “Credentials” 标签页,复制客户端密钥。...重启 DolphinScheduler API 服务器之后,登录页面就会出现 “Login with Keycloak” 和 “Login with Dex” 按钮。...这对实现动态角色同步功能至关重要,每次登录都重新评估用户权限,不只是第一次登录,这样就能保证访问控制始终是最新的。这就需要更新核心用户服务,保证用户权限始终跟中央身份系统一致。
首先我们需要在这些开放平台上注册一个客户端以获取一套类似用户名和密码的凭证。有的叫appid和secret;有的叫clientid和secret,都是一个意思。...下图不仅仅清晰地说明了keycloak中Masterrealm和自定义realm的关系,还说明了在一个realm中用户和客户端的关系。 ?...填写重定向URL 为了测试,这里我只填写了设置选项卡中唯一的必填项有效的重定向URI,这个选项的意思就是客户端springboot-client的所有API都会受到权限管控。...获取和刷新JWT 我们可以通过下面这个方式获取用户登录的JWT对: POST /auth/realms/felord.cn/protocol/openid-connect/token HTTP/1.1...配置如下: keycloak: # 声明客户端所在的realm realm: felord.cn # keycloak授权服务器的地址 auth-server-url: http://localhost
我们的应用只作为 Client 进行注册接入即可。也就是说我们只需要实现 OAuth2.0 客户端的逻辑就可以了,无须关心授权服务器的实现。...因此鼓励用户开始将其旧版 OAuth 2.0 客户端和资源服务器应用程序迁移到Spring Security 5.2 中的新支持。详细参见 官方博客. 3....对 OAuth2.0 的技术选型 从上面的信息看来, Spring Security 未来依然提供 OAuth2 的 客户端支持 和 资源服务器支持。...我这里调研了几个开源免费的项目。 3.1 keycloak keycloak是 RedHat 公司出品。是一个致力于解决应用和服务身份验证与访问管理的开源工具。...用户集中管理。 客户端适配器,轻松保护应用程序和服务。 可视化管理控制台和帐户管理控制台。 可扩展性、高性能、快速实现落地。 文档比较完毕,而且是一个成熟的、免费的商业级产品。
什么时候用到Realm 当特定数量用户之间需要隔离的时候、一系列服务需要统一进行资源管理的时候就用到了Realm。可能我描述的不够全面,至少目前我能感觉到的就是这样。...这个是Keycloak内建的Realm,它的作用有点类似Linux中的root用户,主要是管理其它的Realm,Master Realm中的管理员账户有权查看和管理在Keycloak服务器实例上创建的任何其它...而且你会发现Master Realm中创建的用户可以赋予其独有的两种角色: admin 超级管理员,拥有管理Keycloak服务器上任何realm的完全访问权限。...把该客户端的所有角色都赋予建立的用户。...扩展 Keycloak Admin Client是通过API操作管理Realm的一个客户端工具,我在上一篇已经介绍过了。结合本篇的一些概念可能你会更加深刻的理解如果操作管理Realm。