摘要:本文單純從簡單的技術實現來講,不涉及開放平臺的多維度的運營理念。它的特點就是通過客戶端的后臺服務器,與服務提供商的認證服務器進行互動能夠滿足絕大多數開放平臺認證授權的需求。
本文單純從簡單的技術實現來講,不涉及開放平臺的多維度的運營理念。
什么是開放平臺通過開放自己平臺產品服務的各種API接口,讓其他第三方開發者在開發應用時根據需求直接調用,例如微信登錄、QQ登錄、微信支付、微博登錄、熱門等。
讓第三方應用通過開發平臺,使得自身海量數據資源得到沉淀(變現)
目前國內主流的網站的的開放平臺,都是基于oauth2.0 協議進行做的開放平臺
微信開放平臺授權機制流程圖
微博開放平臺授權機制流程圖
oauth2.0 授權碼模式授權碼模式(authorization code)是功能最完整、流程最嚴密的授權模式。 它的特點就是通過客戶端的后臺服務器,與"服務提供商"的認證服務器進行互動,能夠滿足絕大多數開放平臺認證授權的需求。
配置認證服務器org.springframework.cloud spring-cloud-starter-oauth2 org.springframework.cloud spring-cloud-starter-security
通過內存模式,初始化一個支持授權碼模式的客戶端
@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允許的授權類型 .scopes("app"); // 允許的授權范圍 } }初步完成,測試一下
注意這里是 /oauth/authorize 不是 /oauth/token 接口,只需要帶 client_id 即可。
localhost:9999/oauth/authorize?client_id=pigx&response_type=code&redirect_uri=https://pig4cloud.com
先進行basic 登錄,默認用戶user,密碼已經打在控制臺自己查即可
授權確認
登錄成功帶著code回調到目標接口
通過/oauth/token獲取登錄令牌
簡單的幾步就完成上圖微信或者其他網站的授權流程,不過目前為止 略顯簡陋
登錄沒有界面,用戶密碼數據庫沒有保存
確認授權界面太丑,沒有個性化
配置安全登錄配置未登錄攔截重定向到 loginPage
配置登錄完成提交的頁面路徑 這里會被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(); } }認證服務器配置用戶加載規則實現
@Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) { endpoints.userDetailsService(pigxUserDetailsService) } // 通過這步去加載數據的用戶名密碼 public interface UserDetailsService { UserDetails loadUserByUsername(String var1) throws UsernameNotFoundException; }重寫原有認證頁面
默認邏輯/oauth/confirm_access,讓他重定向到我們自己的路徑,然后進行個性哈
@Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) { endpoints .userDetailsService(pigxUserDetailsService) .pathMapping("/oauth/confirm_access", "/token/confirm_access") }
獲取上下文中的授權信息,傳給前端
/** * 確認授權頁面 * * @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; }
把用戶頭像等信息展示出來就蠻好看了
總結以上源碼參考個人項目 基于Spring Cloud、OAuth2.0開發基于Vue前后分離的開發平臺
QQ: 2270033969 一起來聊聊你們是咋用 spring cloud 的吧。
歡迎關注我們的公眾號獲得更多的好玩JavaEE 實踐
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77510.html
摘要:本文單純從簡單的技術實現來講,不涉及開放平臺的多維度的運營理念。它的特點就是通過客戶端的后臺服務器,與服務提供商的認證服務器進行互動能夠滿足絕大多數開放平臺認證授權的需求。 本文單純從簡單的技術實現來講,不涉及開放平臺的多維度的運營理念。 什么是開放平臺 通過開放自己平臺產品服務的各種API接口,讓其他第三方開發者在開發應用時根據需求直接調用,例如微信登錄、QQ登錄、微信支付、微博登錄...
摘要:是什么提供身份認證和授權服務。你希望你的用戶能使用微信登錄,同時你還希望能追蹤到用戶的注冊來源,活動數據,以便你做后續的用戶增長。 Authing 是什么? Authing 提供身份認證和授權服務。 我們為開發者和企業提供用以保證應用程序安全所需的認證模塊,這讓開發人員無需成為安全專家。 你可以將以任意語言和任意技術棧編寫的應用接入到 Authing,同時你還可以自定義應用程序的登錄方...
摘要:什么是第三方評論系統博客或系統,一般都是有內容和評論兩部分組成。而且垃圾評論和過濾非法關鍵字難度較大,所以在國內外都有第三評論系統。三評論系統實現預備工作創建。 本文只是介紹如何基于 github issues 實現第三方評論系統,對于 Hexo 介紹,本文并不打算詳述,如果有童鞋之前還沒有了解 Hexo 的,可以先看一下之前文章《靜態博客框架 Hexo 入門 》,或者直接訪問 Hex...
閱讀 3094·2021-08-03 14:05
閱讀 2140·2019-08-29 15:35
閱讀 678·2019-08-29 13:30
閱讀 3169·2019-08-29 13:20
閱讀 2531·2019-08-23 18:15
閱讀 1797·2019-08-23 14:57
閱讀 2213·2019-08-23 13:57
閱讀 1310·2019-08-23 12:10