成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

基于oauth 2.0 實(shí)現(xiàn)第三方開(kāi)放平臺(tái)

Simon / 2928人閱讀

摘要:本文單純從簡(jiǎn)單的技術(shù)實(shí)現(xiàn)來(lái)講,不涉及開(kāi)放平臺(tái)的多維度的運(yùn)營(yíng)理念。它的特點(diǎn)就是通過(guò)客戶端的后臺(tái)服務(wù)器,與服務(wù)提供商的認(rèn)證服務(wù)器進(jìn)行互動(dòng)能夠滿足絕大多數(shù)開(kāi)放平臺(tái)認(rèn)證授權(quán)的需求。

本文單純從簡(jiǎn)單的技術(shù)實(shí)現(xiàn)來(lái)講,不涉及開(kāi)放平臺(tái)的多維度的運(yùn)營(yíng)理念。

什么是開(kāi)放平臺(tái)

通過(guò)開(kāi)放自己平臺(tái)產(chǎn)品服務(wù)的各種API接口,讓其他第三方開(kāi)發(fā)者在開(kāi)發(fā)應(yīng)用時(shí)根據(jù)需求直接調(diào)用,例如微信登錄、QQ登錄、微信支付、微博登錄、熱門(mén)等。
讓第三方應(yīng)用通過(guò)開(kāi)發(fā)平臺(tái),使得自身海量數(shù)據(jù)資源得到沉淀(變現(xiàn))
目前國(guó)內(nèi)主流的網(wǎng)站的的開(kāi)放平臺(tái),都是基于oauth2.0 協(xié)議進(jìn)行做的開(kāi)放平臺(tái)

微信開(kāi)放平臺(tái)授權(quán)機(jī)制流程圖

微博開(kāi)放平臺(tái)授權(quán)機(jī)制流程圖

oauth2.0 授權(quán)碼模式

授權(quán)碼模式(authorization code)是功能最完整、流程最嚴(yán)密的授權(quán)模式。 它的特點(diǎn)就是通過(guò)客戶端的后臺(tái)服務(wù)器,與"服務(wù)提供商"的認(rèn)證服務(wù)器進(jìn)行互動(dòng),能夠滿足絕大多數(shù)開(kāi)放平臺(tái)認(rèn)證授權(quán)的需求。

引入相關(guān)依賴

         org.springframework.cloud
         spring-cloud-starter-oauth2
 
 

        org.springframework.cloud
        spring-cloud-starter-security
配置認(rèn)證服務(wù)器

通過(guò)內(nèi)存模式,初始化一個(gè)支持授權(quán)碼模式的客戶端

@Configuration
@AllArgsConstructor
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {

    @Override
    @SneakyThrows
    public void configure(ClientDetailsServiceConfigurer clients) {
        clients.inMemory()
                .withClient("pigx") // client_id
                .secret("pigx") // client_secret
                .authorizedGrantTypes("authorization_code") // 該client允許的授權(quán)類(lèi)型
                .scopes("app"); // 允許的授權(quán)范圍
    }
}
初步完成,測(cè)試一下

注意這里是 /oauth/authorize 不是 /oauth/token 接口,只需要帶 client_id 即可。

localhost:9999/oauth/authorize?client_id=pigx&response_type=code&redirect_uri=https://pig4cloud.com

先進(jìn)行basic 登錄,默認(rèn)用戶user,密碼已經(jīng)打在控制臺(tái)自己查即可

授權(quán)確認(rèn)

登錄成功帶著code回調(diào)到目標(biāo)接口

通過(guò)/oauth/token獲取登錄令牌

簡(jiǎn)單的幾步就完成上圖微信或者其他網(wǎng)站的授權(quán)流程,不過(guò)目前為止 略顯簡(jiǎn)陋

登錄沒(méi)有界面,用戶密碼數(shù)據(jù)庫(kù)沒(méi)有保存

確認(rèn)授權(quán)界面太丑,沒(méi)有個(gè)性化

配置安全登錄

配置未登錄攔截重定向到 loginPage

配置登錄完成提交的頁(yè)面路徑 這里會(huì)被spring security 接管

@Primary
@Order(90)
@Configuration
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {
    @Override
    @SneakyThrows
    protected void configure(HttpSecurity http) {
        http
            .formLogin()
            .loginPage("/token/login")
            .loginProcessingUrl("/token/form")
            .and()
            .authorizeRequests()
            .anyRequest().authenticated();
    }
}
認(rèn)證服務(wù)器配置用戶加載規(guī)則實(shí)現(xiàn)
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
    endpoints.userDetailsService(pigxUserDetailsService)
}

// 通過(guò)這步去加載數(shù)據(jù)的用戶名密碼
public interface UserDetailsService {
    UserDetails loadUserByUsername(String var1) throws UsernameNotFoundException;
}
重寫(xiě)原有認(rèn)證頁(yè)面

默認(rèn)邏輯/oauth/confirm_access,讓他重定向到我們自己的路徑,然后進(jìn)行個(gè)性哈

@Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
        endpoints
                .userDetailsService(pigxUserDetailsService)
                .pathMapping("/oauth/confirm_access", "/token/confirm_access")
    }

獲取上下文中的授權(quán)信息,傳給前端

    /**
     * 確認(rèn)授權(quán)頁(yè)面
     *
     * @param request
     * @param session
     * @param modelAndView
     * @return
     */
    @GetMapping("/confirm_access")
    public ModelAndView confirm(HttpServletRequest request, HttpSession session, ModelAndView modelAndView) {
        Map scopeList = (Map) request.getAttribute("scopes");
        modelAndView.addObject("scopeList", scopeList.keySet());

        Object auth = session.getAttribute("authorizationRequest");
        if (auth != null) {
            AuthorizationRequest authorizationRequest = (AuthorizationRequest) auth;
            ClientDetails clientDetails = clientDetailsService.loadClientByClientId(authorizationRequest.getClientId());
            modelAndView.addObject("app", clientDetails.getAdditionalInformation());
            modelAndView.addObject("user", SecurityUtils.getUser());
        }

        modelAndView.setViewName("ftl/confirm");
        return modelAndView;
    }
最終效果

把用戶頭像等信息展示出來(lái)就蠻好看了

總結(jié)

以上源碼參考個(gè)人項(xiàng)目 基于Spring Cloud、OAuth2.0開(kāi)發(fā)基于Vue前后分離的開(kāi)發(fā)平臺(tái)

QQ: 2270033969 一起來(lái)聊聊你們是咋用 spring cloud 的吧。

歡迎關(guān)注我們的公眾號(hào)獲得更多的好玩JavaEE 實(shí)踐

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/103382.html

相關(guān)文章

  • 基于oauth 2.0 實(shí)現(xiàn)三方開(kāi)放平臺(tái)

    摘要:本文單純從簡(jiǎn)單的技術(shù)實(shí)現(xiàn)來(lái)講,不涉及開(kāi)放平臺(tái)的多維度的運(yùn)營(yíng)理念。它的特點(diǎn)就是通過(guò)客戶端的后臺(tái)服務(wù)器,與服務(wù)提供商的認(rèn)證服務(wù)器進(jìn)行互動(dòng)能夠滿足絕大多數(shù)開(kāi)放平臺(tái)認(rèn)證授權(quán)的需求。 本文單純從簡(jiǎn)單的技術(shù)實(shí)現(xiàn)來(lái)講,不涉及開(kāi)放平臺(tái)的多維度的運(yùn)營(yíng)理念。 什么是開(kāi)放平臺(tái) 通過(guò)開(kāi)放自己平臺(tái)產(chǎn)品服務(wù)的各種API接口,讓其他第三方開(kāi)發(fā)者在開(kāi)發(fā)應(yīng)用時(shí)根據(jù)需求直接調(diào)用,例如微信登錄、QQ登錄、微信支付、微博登錄...

    xiaodao 評(píng)論0 收藏0
  • Authing 是什么及實(shí)現(xiàn)了哪些國(guó)際身份協(xié)議

    摘要:是什么提供身份認(rèn)證和授權(quán)服務(wù)。你希望你的用戶能使用微信登錄,同時(shí)你還希望能追蹤到用戶的注冊(cè)來(lái)源,活動(dòng)數(shù)據(jù),以便你做后續(xù)的用戶增長(zhǎng)。 Authing 是什么? Authing 提供身份認(rèn)證和授權(quán)服務(wù)。 我們?yōu)殚_(kāi)發(fā)者和企業(yè)提供用以保證應(yīng)用程序安全所需的認(rèn)證模塊,這讓開(kāi)發(fā)人員無(wú)需成為安全專(zhuān)家。 你可以將以任意語(yǔ)言和任意技術(shù)棧編寫(xiě)的應(yīng)用接入到 Authing,同時(shí)你還可以自定義應(yīng)用程序的登錄方...

    RichardXG 評(píng)論0 收藏0
  • 基于 github issues 實(shí)現(xiàn)三方評(píng)論系統(tǒng)

    摘要:什么是第三方評(píng)論系統(tǒng)博客或系統(tǒng),一般都是有內(nèi)容和評(píng)論兩部分組成。而且垃圾評(píng)論和過(guò)濾非法關(guān)鍵字難度較大,所以在國(guó)內(nèi)外都有第三評(píng)論系統(tǒng)。三評(píng)論系統(tǒng)實(shí)現(xiàn)預(yù)備工作創(chuàng)建。 本文只是介紹如何基于 github issues 實(shí)現(xiàn)第三方評(píng)論系統(tǒng),對(duì)于 Hexo 介紹,本文并不打算詳述,如果有童鞋之前還沒(méi)有了解 Hexo 的,可以先看一下之前文章《靜態(tài)博客框架 Hexo 入門(mén) 》,或者直接訪問(wèn) Hex...

    waltr 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<