网站seo优化排名,qq空间wordpress搬家,网站开发维护的工作职责,发外链的平台有哪些本文作者#xff1a;极狐(GitLab) 高级解决方案架构师 武让 GitLab 是一个全球知名的一体化 DevOps 平台#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。
企… 本文作者极狐(GitLab) 高级解决方案架构师 武让 GitLab 是一个全球知名的一体化 DevOps 平台很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版专门为中国程序员服务。可以一键式部署极狐GitLab。
企业内部一般都会有多个业务、应用系统为建立统一的用户管理、身份配给和身份认证体系实现一个账号登录所有系统需要建立一套统一身份认证服务平台。 统一身份认证服务平台一般包含以下几个部分
账号管理常见有AD/LDAP或者使用关系型数据库认证管理常见有OAuthSAMLCAS等授权管理审计监控
而单点登录(SingleSignOnSSO)不光可以实现一个账号登录所有系统它通过用户的一次性登录认证就可以访问多个应用。SSO一般会被包含在认证管理功能里。 极狐GitLab支持多种身份认证和授权方式可以与企业的统一身份认证服务平台集成。包括对接AD/LDAP实现统一账号对接SAML、CAS、Auth0、OAuth2等实现SSO。极狐GitLab对于AD/LDAP、SAML、CAS、Auth0的对接提供了详细的文档。而对接Generic OAuth2的文档较粗放网络上也没有太多参考资料所以整理了一篇极狐GitLab对接OAuth2的实践文章。
部署OAuth2 SSO服务
该步骤用于部署OAuth2 SSO的示例服务已经有OAuth2 SSO服务的用户可以跳过但可参考其中的内容。演示项目基于SpringSecurityOAuth2实现单点登录SSO修改。
下载演示项目
演示的代码存放在极狐GitLab SaaSJihuLab.com上地址为https://jihulab.com/majinghe/open-source.git 将此 Repo 代码 clone 到本地。
配置
编辑auth-server/src/main/java/com/example/authserver/config/AuthServerConfig.java 的redirectUris添加或修改极狐GitLab的CallBack URL相当于给OAuth2 SSO服务添加可信的重定向URL。
public void configure(final ClientDetailsServiceConfigurer clients) throws Exception {clients.inMemory().withClient(SampleClientId).secret(passwordEncoder.encode(secret)).authorizedGrantTypes(authorization_code).scopes(user_info).autoApprove(true).redirectUris(http://localhost:8301/login,http://localhost:8302/login, http://example.gitlab.com/users/auth/oauth2_generic/callback);
// 必须进行redirectUris的配置否则请求授权码时会报错errorinvalid_request, error_descriptionAt least one redirect_uri must be registered with the client.
}用户名和密码默认配置在auth-server/src/main/java/com/example/authserver/config/SecurityConfig.java下
protected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().withUser(test123.com).password(passwordEncoder().encode(123)).roles(USER);
}OAuth2相关配置在client-a/target/classes/application.yml下
security:oauth2:client:client-id: SampleClientIdclient-secret: secretaccess-token-uri: http://localhost:8300/auth/oauth/tokenuser-authorization-uri: http://localhost:8300/auth/oauth/authorizeresource:user-info-uri: http://localhost:8300/auth/user/me编译启动
# 项目根目录
mvn clean install
# auth-server http://localhost:8300
cd ./auth-server
mvn spring-boot:run
# client-a http://localhost:8301
cd ./client-a
mvn spring-boot:run
# client-b http://localhost:8302
cd ./client-b
mvn spring-boot:run运行测试
访问client-a localhost:8301 自动跳转到auth-server localhost:8300 登录用户 跳转回client-a localhost:8301并完成登录认证 获取用户信息数据结构
该步骤用于获取OAuth2的user-info-uri返回的数据结构这里可以用Postman操作。
认证方式选OAuth2.0根据上一章节的配置填写OAuth2的相关参数然后点Get New Access Token Postman会弹窗进入OAuth2 SSO服务的登录页面输入用户账号和密码确认是否认证成功 发送请求获取响应结果确认必须是Json格式 配置极狐GitLab
该步骤用于配置极狐GitLab与OAuth2对接并实现SSO。
极狐GitLab对接OAuth2的限制
只能用于单点登录不会提供任何OAuth Provider授予的其他访问权限(例如导入项目或用户等)只支持授权授予流程(最常见的客户端-服务器应用程序如Rails应用程序)不能从多个URL获取用户信息不支持JSON以外的用户信息格式
修改/etc/gitlab/gitlab.rb并gitlab-ctl reconfigure
gitlab_rails[omniauth_allow_single_sign_on] [oauth2_generic]
# 使用OAuth登录的用户无需管理员审批自动创建GitLab用户
gitlab_rails[omniauth_block_auto_created_users] false
gitlab_rails[omniauth_providers] [{name oauth2_generic,# 显示在GitLab登陆页面的SSO登录按钮的文字label SSO,# client_idapp_id SampleClientId,# client_secretapp_secret secret,args: {client_options: {# OAuth SSO 登录认证URLsite: http://localhost:8300,# OAuth 各服务的URLuser_info_url: /auth/user/me,authorize_url: /auth/oauth/authorize,token_url: /auth/oauth/token},# 对应上一章节用户信息数据结构user_response_structure: {# root_path用于逐层解析用户信息的Json直到包含用户信息的节点。以上一章节的响应结果为例用户名username在Json的/userAuthentication/principal节点下对应root_path配置如下root_path: [userAuthentication,principal],# id_path是相对于root_path节点下的某个属性作为GitLab用户的唯一id。以上一章节的响应结果为例由于principal节点只包含了username所以以username作为id对应id_path配置如下id_path: username,# attributes是将root_path节点下的各个属性映射为标准Omniauth的用户属性具体见 https://github.com/omniauth/omniauth/wiki/auth-hash-schema#schema-10-and-later# 以上一章节的响应结果为例由于principal节点只包含了username且username是邮箱账号所以可以将name和email都可以映射到usernameattributes: { name: username,email: username}},strategy_class: OmniAuth::Strategies::OAuth2Generic}}
]运行测试
登录极狐GitLab选择使用SSO登录 自动跳转到OAuth SSO服务 登录认证成功返回极狐GitLab并自动创建用户 注意事项
OAuth2 返回的用户信息必须包含email信息并映射到attributes的email。如本文示例中OAuth即便只返回username但其内容是邮箱信息且映射到了attributes的email否则极狐GitLab会给出以下错误提示。 如果极狐GitLab中已经存在同名、同邮箱的用户使用SSO登录会出现以下错误提示。
可参考OmniAuth[2]或参考下图将OAuth SSO关联到已存在的用户。 号外号外 极狐GitLab 正在推出DevSecOps 成熟度测评链接https://gitlab.cn/devsecops-assessment/ 测评非常全面并提供了可靠建议即使不付费买产品对自己想要落地 DevSecOps 的用户具有很高的参考意义快来动手试试吧