草庐IT

GAF 认证对接介绍

超图GAF 2024-01-05 原文

GAF 认证对接介绍

前几篇文章对GAF的各个模块功能进行详细介绍,并通过管网示例, 实践了扩展开发流程。接下来重点介绍GAF的认证体系,以及如何与其他系统相互之间对接认证,解决系统之间的如何共享用户体系、单点登录问题。

认证模块介绍

使用的技术

在认证微服务模块(gaf-authentication), 使用spring-security+oauth2.0,提供认证、oauth2、token、用户相关的接口。相关接口可查看API文档

在网关模块,使用spring-cloud-gateway +一系列自定义过滤器,在网关处进行统一认证。网关调用认证微服务的接口进行认证校验,并获取用户信息,传递给下游微服务,以便下游微服务使用。

认证方式

1. 通过用户名密码登录,后续请求使用cookie

使用POST方式发送请求/api/authentication/login/username_password到网关或者前端,进行登录。后端返回cookie,后续所有请求携带cookie,则可通过认证校验,并获取到用户信息。

2.通过用户名密码获取jwt token, 后续请求使用jwt token

使用POST方式发送请求/api/authentication/token到网关或者前端,从返回内容中的data.access_token字段获取jwt。后续所有请求增加请求头Authorization Bearer ${获取的jwt},则可通过认证校验,并获取到用户信息。

这种方式,适用于其他系统调用GAF系统的接口。

第三方登录

认证组件(gaf-authentication)中,提供了第三方登录配置,支持OpenId和OAuth2协议。

配置说明

yaml格式

login:
  enable-third-party: false #是否开启第三方登录
  third-party-login-model: mutiple  # 第三方登录模式 single (表示只有一种第三方登录) 或者 mutiple (第三方登录可以存在多种)
  third-party-name: oidc:keycloak # 第三方登录名 由下面third-party信息构成 例如oidc:keycloak或者oauth2:github
  third-party:
    oidc:
      keycloak:
        order: 1   # 排序序号
        iconUrl: https://www.keycloak.org/resources/favicon.ico  # 图标地址
        provider:
          authorizationUri: http://xxx:xx/auth/realms/master/protocol/openid-connect/auth  
          tokenUri: http://xxx:xx/auth/realms/master/protocol/openid-connect/token   # 获取token的接口
          userInfoUri: http://xxx:xx/auth/realms/master/protocol/openid-connect/userinfo  # 获取用户信息的接口
          userNameAttribute: preferred_username    # 返回用户信息中代表用户名的属性名
        registration:
          clientId: my-gaf-authentication          # 在第三方登录中心 提前注册的客户端id
          clientSecret: c140a5f3-64cf-4613-9faa-49c880b3008e   # 在第三方登录中心 提前注册的客户端密钥
          redirectUri: http://${gaf主机ip:端口}/api/authentication/login/callback/oidc   # 回调地址。
          scope: ["roles","email","profile","web-origins"]
    oauth2:
      github:
        order: 2
        iconUrl: https://img.icons8.com/fluency/48/ffffff/github.png # 图标地址
        provider:
          authorizationUri: https://github.com/login/oauth/authorize
          tokenUri: https://github.com/login/oauth/access_token   # 获取token的接口
          userInfoUri: https://api.github.com/user  # 获取用户信息的接口
          userNameAttribute: login  # 返回用户信息中代表用户名的属性名
        registration:
          clientId: 3258e18d4d57bab07630   # 在第三方登录中心 提前注册的客户端id
          clientSecret: 5665dc4d3a767e88e9b4af1a0893585e932548e5   # 在第三方登录中心 提前注册的客户端密钥
          redirectUri: http://${gaf主机ip:端口}/api/authentication/login/callback/oauth2  # 回调地址
          scope: [ "read:user" ]

准备好所需配置的值后,把yaml格式的配置转换为properties格式的配置,可在GAF的微服务配置中心修改gaf-authentication中login.third-party相关的配置,开启第三方登录,修改完成后保存,点击发布按钮直接生效。效果图如下。

作为登陆中心,其他系统使用GAF进行登录

示例及配置

spring security 5.2.x分支的oauth2登录样例为例子,在配置了默认的四种第三方登录google、github、facebook、okta的情况下,增加GAF第三方登录配置,以GAF作为登录中心进行登录。

在进行配置之前,需要联系GAF的管理员,注册客户端,获取客户端id和客户端密钥。

GAF管理员需在GAF的数据库的oauth_client_details表中注册客户端信息。其需要填写的字段包括

  "client_id" 客户端id,用于唯一标识每一个客户端(client),必须唯一,不能为空.,
  "resource_ids" 客户端所能访问的资源id集合,多个资源时用逗号(,)分隔,如: "unity-resource,mobile-resource".,
  "client_secret" 客户端(client)的访问密匙 必须填写,
  "scope" 指定客户端申请的权限范围,可选值包括read,write,trust;若有多个权限范围用逗号(,)分隔,如: "read,write"
  "authorized_grant_types"指定客户端支持的grant_type,可选值包括authorization_code,password,refresh_token,implicit,client_credentials, 若支持多个grant_type用逗号(,)分隔,如: "authorization_code,password".
  "web_server_redirect_uri" 客户端的重定向URI 当grant_type为authorization_code或implicit时, 在Oauth的流程中会使用并检查与注册时填写的redirect_uri是否一致,
  "authorities" varchar(256) 指定客户端所拥有的Spring Security的权限值,可选, 若有多个权限值,用逗号(,)分隔, 如: "ROLE_UNITY,ROLE_USER",
  "access_token_validity" 设定客户端的access_token的有效时间值(单位:秒),可选, 若不设定值则使用默认的有效时间值(60 * 60 * 12, 12小时).,
  "refresh_token_validity" 设定客户端的refresh_token的有效时间值(单位:秒),可选, 若不设定值则使用默认的有效时间值(60 * 60 * 24 * 30, 30天).,
  "additional_information"这是一个预留的字段,在Oauth的流程中没有实际的使用,可选,但若设置值,必须是JSON格式的数据,如:
{"country":"CN","country_code":"086"} ,
  "autoapprove" 设置用户是否自动Approval操作, 默认值为 'false', 可选值包括 'true','false', 'read','write'.
该字段只适用于grant_type="authorization_code"的情况,当用户登录成功后,若该值为'true'或支持的scope值,则会跳过用户Approve的页面, 直接授权,

字段填写举例

client_id               custom_client            
resource_ids	        custom_client_rid
client_secret	$2a$10$cfHuOZPGdPU1LfPOsltQ9.FOfA6iD9R6FuQR.5rjd5AEd7qOl4eCq(这里是BCrypt加密后的结果,需将原始客户端密钥手动用BCrypt加密)
scope                   all
authorized_grant_types  password,authorization_code,refresh_token
web_server_redirect_uri http://localhost:8080/login/oauth2/code/gaf
authorities             
access_token_validity   7200
refresh_token_validity  72000
additional_information
autoapprove             true

此时GAF管理员返回客户端id和客户端密钥原始值给申请者。例如custom_client/123

spring security 5.2.x分支的oauth2登录样例的配置文件中增加gaf相关的配置,完整配置如下。

server:
  port: 8080

logging:
  level:
    root: INFO
    org.springframework.web: INFO
    org.springframework.security: INFO
#    org.springframework.boot.autoconfigure: DEBUG

spring:
  thymeleaf:
    cache: false
  security:
    oauth2:
      client:
        registration:
          google:
            client-id: your-app-client-id
            client-secret: your-app-client-secret
          github:
            client-id: your-app-client-id
            client-secret: your-app-client-secret
          facebook:
            client-id: your-app-client-id
            client-secret: your-app-client-secret
          okta:
            client-id: your-app-client-id
            client-secret: your-app-client-secret
          gaf:            # 增加使用gaf作为登录中心相关的配置
            provider: gaf   # 值对应下面的provider: gaf
            authorizationGrantType: authorization_code  # 授权类型,授权码模式
            clientAuthenticationMethod: post  #客户端认证方式 采用post请求
            client-id: custom_client   # GAF里注册的客户端id
            client-secret: 123        # GAF里注册的客户端密钥(加密前的)
            redirectUri: http://localhost:8080/login/oauth2/code/gaf   # 授权码回调地址
            scope: all    # 授权的权限
            clientName: custom_client     # 用于显示
        provider:
          okta:
            authorization-uri: https://your-subdomain.oktapreview.com/oauth2/v1/authorize
            token-uri: https://your-subdomain.oktapreview.com/oauth2/v1/token
            user-info-uri: https://your-subdomain.oktapreview.com/oauth2/v1/userinfo
            jwk-set-uri: https://your-subdomain.oktapreview.com/oauth2/v1/keys
          gaf:
            authorization-uri: http://gaf.net.cn/api/oauth/authorize   # GAF授权接口
            token-uri: http://gaf.net.cn/api/oauth/token        # 根据授权码获取token的接口
            user-info-uri:  http://gaf.net.cn/api/authentication/user/info  # 根据token获取用户信息的接口
            jwk-set-uri: https://your-subdomain.oktapreview.com/oauth2/v1/keys  #暂时无需设置
            user-name-attribute: name  # 返回的用户信息中的代表用户名的属性名

登录效果

有关GAF 认证对接介绍的更多相关文章

  1. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  2. ruby - token 认证 - 2

    简单代码require'net/http'url=URI.parse('getjson/otherdatahere[link]')req=Net::HTTP::Get.new(url.to_s)res=Net::HTTP.start(url.host,url.port){|http|http.request(req)}putsres.body只是想知道如何在phpcURL中放置身份验证token,我是这样做的    curl_setopt($ch,CURLOPT_HTTPHEADER,array('Authorization:Bearerxxx'));//Bearertokenfora

  3. ruby - HTTParty 摘要认证 - 2

    谁能提供一个使用HTTParty和digestauth的例子?我在网上找不到例子,希望有人能提供一些帮助。谢谢。 最佳答案 您可以在定义类时使用digest_auth方法设置用户名和密码classFooincludeHTTPartydigest_auth'username','password'end 关于ruby-HTTParty摘要认证,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questi

  4. H2数据库配置及相关使用方式一站式介绍(极为详细并整理官方文档) - 2

    目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式

  5. 华为认证的网络工程师证好考吗,含金量高吗 ? - 2

    华为认证分等级的,相当于初中高三个等级,当然高级是比较难考的,也是含金量最高的。我就慢慢给你介绍一下。1.了解华为认证华为认证网络工程师是由华为公司认证与采购部推出的独立认证体系,与之前的华为认证不同,简称HCIA。同时华为认证是华为技术有限公司凭借多年信息通信技术人才培养经验,以及对行业发展的理解,以层次化的职业技术认证为指引,推出的覆盖IP、IT、CT以及ICT融合技术领域的认证体系,是ICT全技术领域认证体系。​2.怎么考取华为认证网络工程师?要考取华为认证网络工程师必须选择最近的Prometric授权考试中心APTC报名并参加GB0-190的考试,考试通过后,以获得由华为统一签发的“华

  6. Spring Cloud Gateway 服务网关的部署与使用详细介绍 - 2

    为什么需要服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关,客户端只能在本地记录每个微服务的调用地址,当需要调用的微服务数量很多时,它需要了解每个服务的接口,这个工作量很大。有了网关之后,网关作为系统的唯一流量入口,封装内部系统的架构,所有请求都先经过网关,由网关将请求路由到合适的微服务。使用网关的好处1)简化客户端的工作。网关将微服务封装起来后,客户端只需同网关交互,而不必调用各个不同服务;(2)降低函数间的耦合度。一旦服务接口修改,只需修改网关的路由策略,不必修改每个调用该函数的客户端,从而减少了程序间的耦合性(3)解放开发

  7. 2023年6月DAMA-CDGP数据治理专家认证请尽快报名啦! - 2

    目前6月DAMA-CDGP数据治理认证考试开放报名地区有:北京、上海、广州、深圳、长沙、呼和浩特。目前南京、济南、西安、杭州等地区还在接近开考人数中,打算参加6月考试的朋友们可以抓紧时间报名啦!!!5月初,DAMA-CDGA/CDGP数据治理认证考前班也即将开班啦!报名从速!!!DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业竞争能力。DAMA是数据管理方面的认证,帮助数据从业者提升数据管理能力。CDGP数据治理专家认证属于

  8. ruby - Vim 详细介绍了 Rails 的自动完成功能 - 2

    我发现python的细节自动完成很好RubyonRails有类似的方法描述吗? 最佳答案 有篇不错的文章"UsingVIMasacompleteRubyonRailsIDE"其中引用rails.vim.这似乎是RailsforVIM的实际标准。(不过,我还没有使用过它,但很快就会尝试。)这允许你做很多与Rails相关的任务,但对自动完成没有帮助。还有一篇"RubyAutocompleteinVim"(遗憾的是不再可用)这就是您要搜索的内容。我不知道,理解Rails的所有插件魔法和元编程的东西是否足够聪明。它至少在vim的配置中提到了

  9. ruby-on-rails - 在 mongoid.yml 中指定认证数据库 - 2

    我正在尝试通过mongoid.yml进行身份验证,但我想要进行身份验证的用户在admin数据库中。如果我尝试在数据库字段中指定管理数据库,它也会将所有集合放在那里,我不希望这样。有没有办法将我的数据库字段设置为我想要的数据库,但指定一个单独的身份验证数据库?这是我的mongoid.yml文件development:sessions:default:database:XC_DEVhosts:-IP:PORTusername:userpassword:password 最佳答案 这个问题已经存在一年多了,但值得回答。是的,auth_so

  10. 评测:对接GPT-4的NewBing使用体验变化 - 2

    GPT-4是OpenAI发布的最新一代语言模型,于2023年3月14日正式发布,并通过API和ChatGPTPlus平台向用户开放。微软也证实,在GPT-4正式发布之前,就已经在部分版本的Bing中使用GPT-4技术。本文旨在对使用GPT-4技术的NewBing进行中立、专业的使用评测,探讨其使用体验的变化。界面与限额早于2月26日小编获得Newbing试用资格,届时Newbing初体验并不理想,限制多,例如对话只能持续5条自动终止,对话字符受限,生成效果不尽如人意。然而今日对接GPT-4全新bing额度扩充至15条,且对话字数扩容至2000字。Newbing提供了三种模式选项,即创造力、平衡

随机推荐