成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

RuoYi開發框架與第三方認證系統集成起來的簡單方法

開發 前端
我們的組織或公司都已經構建了自己的認證系統,這個時候如何把我們的若依開發的系統和我們的認證系統集成在一起呢。這篇文章就給出全過程保姆式的方法演示。

背景

若依框架現在很火,很多團隊與個人都使用它。作者看了看它最新的代碼,它的認證方式有所不同,前后臺分離版本使用的是shiro(具體代碼:https://gitee.com/y_project/RuoYi/tree/master/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro),微服務版本使用的是JWT(具體代碼:https://gitee.com/y_project/RuoYi-Cloud/blob/master/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java#L44)。不過很多時候,我們的組織或公司都已經構建了自己的認證系統,這個時候如何把我們的若依開發的系統和我們的認證系統集成在一起呢。這篇文章就給出全過程保姆式的方法演示。

準備工作

搭建oauth2的認證服務

這個服務我們是基于spring-security-oauth2來實現的。依賴pom.xml如下:

<!-- spring security 安全認證 -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-security</artifactId>
</dependency>

<!-- spring security oauth2 開放授權 -->
<dependency>
          <groupId>org.springframework.security.oauth</groupId>
          <artifactId>spring-security-oauth2</artifactId>
          <version>${security.oauth2.version}</version>
 </dependency>

oauth2認證服務器的配置:

認證服務配置

服務測試

訪問/oauth/token使用參數列表如下,注意我們這個地方grant_type用的是password。

OAuth 2.0中常見的grant_type:

  1. authorization_code:用于通過授權碼獲取訪問令牌,通常用于Web應用程序或本機應用程序中。
  2. password:用于通過用戶名和密碼獲取訪問令牌,通常用于受信任的客戶端(如移動應用程序)中。
  3. client_credentials:用于客戶端憑據(如應用程序密鑰)獲取訪問令牌,通常用于機器到機器通信中。
  4. refresh_token:用于使用刷新令牌獲取新訪問令牌,通常用于在訪問令牌過期后更新訪問令牌。

client_id


client_secret


grant_type

password

scope


username


password


測試授權服務器的接口

正式工作

下面以前后臺分離版本的若依為例。

  1. 增加依賴:
<dependency>
   <groupId>org.springframework.security.oauth.boot</groupId>
   <artifactId>spring-security-oauth2-autoconfigure</artifactId>
   <version>2.0.1.RELEASE</version>
</dependency>
  1. 去掉shiro相關代碼(因為我們是基于spring-security-oauth來實現與認證服務器的對接)。
  2. 在WebsecurityConfig類上添加注解@EnableOAuth2Sso。

改造websecurityconfig

  1. application.yml中添加客戶端配置。
security:
  oauth2:
    client:
      clientId: *****
      clientSecret: *****
      accessTokenUri: ${auth-server}/oauth/token
      userAuthorizationUri: ${auth-server}/oauth/authorize
    resource:
      userInfoUri: ${auth-server}/system/user/get
    redirectUri: *****

其中userInfoUri是認證服務器提供的獲取用戶信息的接口。

  1. 修改ruoyi-ui的login.js中的登錄方法,使得它訪問認證服務器獲取token。
// 登錄方法
export function login(username, password, code, uuid) {
  return root_request({
    url: '/oauth/token',
    method: 'post',
    params: { username, password, code, uuid, client_id, client_secret, grant_type, scope }
  })
}

上面的root_request是我們新建的一個axios實例,它訪問的是認證服務器,而不是ruoyi的后臺。

const service = axios.create({
  // axios中請求配置有baseURL選項,表示請求URL公共部分
  baseURL: '/cgroot',
  // 超時
  timeout: 10000
})
  1. vue.config.js中添加新的路由。
devServer: {
    host: '0.0.0.0',
    port: port,
    proxy: {
        // detail: https://cli.vuejs.org/config/#devserver-proxy
        [process.env.VUE_APP_BASE_API]: {
            target: `http://localhost:8080`,
            changeOrigin: true,
            pathRewrite: {
             ['^' + process.env.VUE_APP_BASE_API]: ''
            }
        },
      ['/cgroot']: {
        target: `http://localhost:8880`,
        changeOrigin: true,
        pathRewrite: {
          ['^' + '/cgroot']: ''
        }
      }
    },
    disableHostCheck: true
},
  1. 獲取用戶的方法也要做修改。
/**
 * 獲取用戶
 **/
public static LoginUser getLoginUser()
{
    try
    {
        OAuth2Authentication authentication = (OAuth2Authentication)getAuthentication();
        Map<String, Object> userMap =
                (Map<String, Object>) ((Map<String, Object>) authentication
                        .getUserAuthentication().getDetails()).get("data");
        SysUser user = new SysUser();
        Integer userId = (Integer) userMap.get("userId");
        Integer proxyId = (Integer) userMap.get("proxyId");
        String userName = (String) userMap.get("userName");
        String avatar = (String) userMap.get("avatar");
        String phonenumber = (String) userMap.get("phonenumber");
        String email = (String) userMap.get("email");
        String nickName = (String)userMap.get("nickName");
        user.setUserId(Long.parseLong(String.valueOf(userId)));
        user.setNickName(nickName);
        user.setAvatar(avatar);
        user.setPhonenumber(phonenumber);
        user.setEmail(email);
        user.setUserName(userName);
        user.setProxyId(Long.parseLong(String.valueOf(proxyId)));
        LoginUser loginUser =  new LoginUser();
        loginUser.setUser(user);
        return loginUser;
    }
    catch (Exception e)
    {
        throw new CustomException("獲取用戶信息異常", HttpStatus.UNAUTHORIZED);
    }
}

這樣便實現了ruoyi開發的系統與我們的第三方認證服務的對接。當然上面實現的是通過grant_type為password方式獲取token,如果通過authorization_code獲取token的話,上面的login方法里面需要用到重定向回來得到的code。

后記

上面的實現的關鍵是EnableOAuth2Sso這個注解,EnableOAuth2Sso是一個Spring Security的注解,用于在基于OAuth2的單點登錄(SSO)流程中啟用OAuth2 SSO支持。它實現在SpringSecurityFilterChain過濾器鏈上添加OAuth2ClientAuthenticationProcessingFilter這個用于登錄認證的Filter。它攔截用戶的請求,并通過access_token獲取認證服務器上的用戶信息,并創建Authentication登錄后憑證,并完成principal存儲,讓人感覺像ruoyi直接訪問數據庫拿到用戶信息一樣。

創建Authentication

參考文章

https://www.cnblogs.com/trust-freedom/p/12002089.html(EnableOAuth2Sso原理)。

https://www.rfc-editor.org/rfc/rfc6749 (OAuth2 RFC)。

責任編輯:姜華 來源: 今日頭條
相關推薦

2015-11-05 16:44:37

第三方登陸android源碼

2023-08-02 08:40:18

RuoYiSpring

2021-09-26 10:43:08

注冊Istio集成

2019-04-17 08:40:11

IPv6網絡采購商

2015-04-27 19:32:16

Moxtra

2024-04-03 12:57:29

2021-08-03 10:07:41

鴻蒙HarmonyOS應用

2017-12-11 15:53:56

2010-05-10 10:47:21

Chrome操作系統開源

2023-10-11 09:54:59

Java開發

2019-07-30 11:35:54

AndroidRetrofit

2014-07-23 08:55:42

iOSFMDB

2011-07-25 14:14:49

iPhone SQLITE Pldatabase

2011-05-07 14:20:25

加密方案Transcoder BlackBerry

2022-01-14 09:57:14

鴻蒙HarmonyOS應用

2013-12-24 16:58:28

搜狐

2017-05-16 13:24:02

LinuxCentOS第三方倉庫

2014-07-25 09:33:22

2019-09-03 18:31:19

第三方支付電商支付行業

2016-10-21 14:09:10

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品99久久久久久动医院 | 国产精品成人在线播放 | 日韩中文一区 | www.伊人.com| 日韩激情在线 | 精品国产一区二区三区久久久蜜月 | 精品www| 久久99国产精一区二区三区 | 国际精品鲁一鲁一区二区小说 | 亚洲精精品 | 色天天综合 | 日韩av电影院| 亚洲国产成人精品女人久久久 | 亚洲色欧美另类 | 国产精品18久久久久久白浆动漫 | 天堂av在线影院 | 亚洲免费在线观看视频 | 国产精品日韩欧美一区二区三区 | 久久久免费少妇高潮毛片 | 国产1区2区3区 | 欧美一级特黄aaa大片在线观看 | 国产一级片在线观看视频 | 日韩一区二区免费视频 | 久久综合一区 | 一区二区av | 在线播放国产一区二区三区 | 欧美精品一区二区三区在线 | 久久不射电影网 | 中文字幕 在线观看 | 精品视频一区二区 | 亚洲九九色 | 成人一区二区三区视频 | 日本一二三区在线观看 | 视频一区二区国产 | 欧美aⅴ片| 国产一区二区三区四区 | 午夜视频在线播放 | 日韩成人免费视频 | 色五月激情五月 | 久久亚洲视频 | 五月婷婷丁香婷婷 |