




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
學(xué)成-第16天-講義-SpringSecurityOauth2用戶認(rèn)證需求截至目前,項(xiàng)目已經(jīng)完成了學(xué)習(xí)功能,用戶通過學(xué)習(xí)頁面點(diǎn)播進(jìn)行學(xué)習(xí)。如何去記錄學(xué)生的學(xué)習(xí)過程呢?要想掌握學(xué)生的學(xué)習(xí)情況就需要知道用戶的,記錄哪個(gè)用戶在什么時(shí)間學(xué)習(xí)什么課程;如果用戶要購買課程也需要知道用戶的。所以,去管理學(xué)生的學(xué)習(xí)過程最基本的要實(shí)現(xiàn)用戶的認(rèn)證。用戶認(rèn)證通過后去系統(tǒng)的資源,系統(tǒng)會(huì)判斷用戶是否擁有資源的權(quán)限,只允許限的系統(tǒng)資源,限的資源將無法,這個(gè)過程叫用戶。本項(xiàng)目包括多個(gè)子項(xiàng)目,如:學(xué)習(xí)系統(tǒng),教學(xué)、系統(tǒng)等,為了提高用戶體驗(yàn)性需要實(shí)現(xiàn)用戶只證一次便可以在多個(gè)擁有權(quán)限的系統(tǒng)中,這個(gè)功能叫做單點(diǎn)登錄。百科:單點(diǎn)登錄(SingleSignOn 簡稱為SSO,是目前比較流行的企業(yè)業(yè)務(wù)整合的解決方案之一。下圖是SSO的示意圖,用戶登錄學(xué)成網(wǎng)一次即可多個(gè)系統(tǒng)1.31.3 不屬于本系統(tǒng),本系統(tǒng)并沒有用戶的賬號(hào)、等信息,本系統(tǒng)如果要獲取該用戶的基本信息則需要首先通 的認(rèn)證系統(tǒng) 認(rèn)證)進(jìn)行認(rèn)證 認(rèn)證通過后本系統(tǒng)便可獲取 用戶基本信息,從而在本系統(tǒng)將 用戶的頭像、昵稱等信息顯示出來,該用戶便不用在本系統(tǒng)卻可以直接學(xué)習(xí)什么是第認(rèn)證(跨平臺(tái)認(rèn)證 用戶認(rèn)證技術(shù)單點(diǎn)登錄的特點(diǎn)1、ApacheShiro.2、3、SpringsecurityOauth2Oauth2認(rèn)證流第認(rèn)證技術(shù)方案最主要是解決認(rèn)證協(xié)議的通用標(biāo)準(zhǔn)問題,因?yàn)橐獙?shí)現(xiàn)跨系統(tǒng)認(rèn)證,各系統(tǒng)之間要遵循一定的AUH協(xié)議為用戶資源的提供了一個(gè)安全的、開放而又簡易的標(biāo)準(zhǔn)。同時(shí),任何第都可以使用AU認(rèn)證服務(wù),任何服務(wù)提供商都可以實(shí)現(xiàn)自身的AUH認(rèn)證服務(wù),因而AUH是開放的。業(yè)界提供了AUH現(xiàn)如PP、JavScip,Java,Ry等各種語言開發(fā)包,大大節(jié)約了程序員的時(shí)間,因而AUH是簡易的?;ヂ?lián)網(wǎng)很多服務(wù)如OpnAP,很多大公司如,aho,等都提供了AUH認(rèn)證服務(wù),這些都足以說明AUH標(biāo)準(zhǔn)逐漸成為開放資源的標(biāo)準(zhǔn)。Oath協(xié)議目前發(fā)展到.版本,.0版本過于復(fù)雜,2.版本已得到廣泛應(yīng)用。參考:tts /ite/At/ fr=ladinOauth協(xié)議 認(rèn)證的過程1、客戶端請(qǐng)求用戶進(jìn)入程序的登錄頁面,點(diǎn) 的圖標(biāo) 里信息的資源擁有者點(diǎn)擊 ,此時(shí)用戶掃 會(huì)對(duì)資源擁有者的進(jìn)行驗(yàn)證,驗(yàn)證通過后,微信會(huì)詢問用戶是否給程序員自己的 頒發(fā)一個(gè)碼,并重定向到程序員的。3、客戶端獲取到碼,請(qǐng)求認(rèn)證服務(wù)器申請(qǐng)令認(rèn)證服務(wù)器驗(yàn)證了客戶端請(qǐng)求的碼,如果合法則給客戶端頒發(fā)令牌,令牌是客戶端資源的通行證此交互過程用戶看不到,當(dāng)客戶端拿到令牌后,用戶在程序員看到已經(jīng)登錄成功??蛻舳藬y帶令牌資源服務(wù)器的資源程序員攜帶令牌請(qǐng)求服務(wù)器獲取用戶的基本信息服務(wù)器來校驗(yàn)令牌的。引自O(shè)auth2.0協(xié)議rfc6749 學(xué)成Androd客戶端、學(xué)成在 3、服務(wù)器(也稱認(rèn)證服務(wù)器用來對(duì)資源擁有的進(jìn)行認(rèn)證、對(duì)資源進(jìn)行??蛻舳艘胭Y源需要通過認(rèn)證服務(wù)器由資源擁有者權(quán)后方可。資源的服務(wù)器,比如,學(xué)成網(wǎng)用戶管理服務(wù)器了學(xué)成網(wǎng)的用戶信息,學(xué)成網(wǎng)學(xué)習(xí)服務(wù)器了學(xué)生的學(xué)信息, 的資源服務(wù)了 的用戶信息等。客戶端最終資源服務(wù)器獲取資源信息。Oauth2在本項(xiàng)目的應(yīng)Oath2是一個(gè)標(biāo)準(zhǔn)的開放的協(xié)議,應(yīng)用程序可以根據(jù)自己的要求去使用Oauth2,本項(xiàng)目使用Oauth2下目標(biāo):3、學(xué)成前端(客戶端)學(xué)成微服務(wù)的資源SpringsecurityOauth2本項(xiàng)目采用Springsecurity+Oauth2完成用戶認(rèn)證及用戶,Springsecurity是一個(gè)強(qiáng)大的和高度可定制的身份驗(yàn)證和控制框架,Springsecurity框架集成了Oauth2協(xié)議,下圖是項(xiàng)目認(rèn)證架構(gòu)圖:2、認(rèn)證服務(wù)下發(fā)用戶令牌,擁有令牌表示合法 如果合法則放行繼續(xù)6、資源服務(wù)完成則響應(yīng)資源信息SpringSecurityOauth2本項(xiàng)目認(rèn)證服務(wù)基于SpringSecurityOauth2進(jìn)行構(gòu)建,并在其基礎(chǔ)上作了一些擴(kuò)展,采用JWT令牌機(jī)制,并自定義了用戶的內(nèi)容。本的主要目標(biāo)是學(xué)項(xiàng)目中集成SpringSecurityOauth2的方法和流程,通過springSecurityOauth2的研究需要達(dá)到以下目標(biāo):2、理解springSecurityOauth23、掌握資源服務(wù)集成 導(dǎo)入基礎(chǔ)工 下的xc-service-ucenter-auth工程,該工程是基于SpringSecurityOauth2的一個(gè)二次封裝的工創(chuàng)建數(shù)據(jù)導(dǎo)入資 下的xc_user.sql,創(chuàng)建用戶數(shù)據(jù)以“oauth_”開頭的表都是springSecurity自帶的本項(xiàng)目中springSecurity主要使用oauth_client_detailsclient_id:客戶端idresource_ids:資源id(暫時(shí)不用)client_secret:客戶端scope:范圍authorized_grant_type:類型Oauth2模碼模式(AuthorizationCode)隱式模式(Implicit)模式(ResourceOwnerPasswordCredentials)客戶端模式(ClientCredentials)其中碼模式和模式應(yīng)用較多,本小節(jié)介紹碼模式碼流 認(rèn)證的過程就是碼模式,流程如下1、客戶端請(qǐng)求第2、用戶(資源擁有者)同意給客戶端3、客戶端獲取到碼,請(qǐng)求認(rèn)證服務(wù)器申請(qǐng)令牌4、認(rèn)證服務(wù)器向客戶端響應(yīng)令牌5、客戶端請(qǐng)求資源服務(wù)器的資源 資源服務(wù)校驗(yàn)令牌,完成申請(qǐng)請(qǐng)求認(rèn)證服務(wù)獲取碼參數(shù)列表如下response_type:碼模式固定為scop:客戶端范圍,和配置類中設(shè)置的scop一致首先跳轉(zhuǎn)到登錄頁面SngSecuty接收到請(qǐng)求會(huì)調(diào)用UsrDtisService接口的laUsrByUsr方法查詢用戶正確的。當(dāng)前導(dǎo)入的基礎(chǔ)工程中將正確的硬編碼為“123,所以這里賬號(hào)隨意輸入,輸入12即可認(rèn)證通過。認(rèn)證服務(wù)攜帶碼跳轉(zhuǎn)申請(qǐng)令拿到碼后,申請(qǐng)令牌Post請(qǐng)求:hos參數(shù)如下erct_i:申請(qǐng)碼時(shí)的跳轉(zhuǎn)ul,一定和申請(qǐng)碼時(shí)用的riec_ui一致。此需使用pBsc認(rèn)。什么是httpBasicttp協(xié)議定義的一種認(rèn)證方式,將客戶端id和客戶端按照客戶端D:客戶端”的格式拼接,并用ase64編碼,放在heaer中請(qǐng)求服務(wù)端,一個(gè)例子:Authorization:Basic認(rèn)證失敗服務(wù)端返回401Unauthorizedhttpbasic點(diǎn)擊發(fā)送申請(qǐng)令牌成功token_type:有MACToken與BearerToken兩種類型,兩種的校驗(yàn)算法不同,RFC6750建議Oauth2采用Bearer 資源服資源服務(wù)流 客戶端攜帶令牌資源服務(wù),如果令牌合法則可成功資源服務(wù)中的資上圖的業(yè)務(wù)流程如下3、客戶端攜帶令牌資源服客戶端在Httpheader中添加:Authorization:Bearer資源服務(wù)接收到令牌,使用公鑰校驗(yàn)令牌的資源服務(wù)配基本上所有微服務(wù)都是資源服務(wù),這里我們?cè)谡n程管理服務(wù)上配置控制,當(dāng)配置了控制后如要課程信1、配置公 對(duì)外向資源服務(wù)提供公鑰,資源服務(wù)使用公鑰來校驗(yàn)令牌的。 2、添加依<groupId>org.spri<artifactId>spring‐c@EnableGlobalMethodSecurity(prePostEnabled=true,securedEnabled=true)//激活方法上PreAuthorize注publicclassResourceServerConfigextendsResourceServerConfigurerAdapter//privatestaticfinalStringPUBLIC_KEY=publicTokenStoretokenStore(JwtAccessTokenConverter{returnnew}publicJwtAccessTokenConverter{JwtAccessTokenConverterconverter=newJwtAccessTokenConverter();return}獲取非對(duì)稱加密公鑰@return公鑰privateStringgetPubKey()Resourceresource=newClassPathResource(PUBLIC_KEY);try{InputStreamReaderinputStreamReader=newBufferedReaderbr=newBufferedReder(inputStreamReader);returnbr.lines().collect(Collectors.joining("\n");}catch(IOException{return}}//Http安全配置,對(duì)每個(gè)到達(dá)系統(tǒng)的ttp請(qǐng) 進(jìn)行校publicvoidconfigure(HttpSecurityhttp)throwsException//所有請(qǐng)求必須認(rèn)證通}}資源服務(wù)測(cè)這里我們測(cè)試課程查get{{"error":"error_description":"Fullauthenticationisrequiredtoaccessthis}請(qǐng)求時(shí)攜帶令牌在httpheader中添加Authorization:Bearer解決swagger-ui當(dāng)課程管理加了之后再swagger-ui則報(bào)錯(cuò)修改配置類ResorceSevrCn?g的cn?gre方法:針對(duì)swagr-i的請(qǐng)求路徑進(jìn)行放行://Http//Http安全配置,對(duì)每個(gè)到達(dá)系統(tǒng)的http請(qǐng) 進(jìn)行校publicvoidconfigure(HttpSecurityhttp)throwsException//所有請(qǐng)求必須認(rèn)證通//下邊的路徑.antMatchers("/v2/api‐docs","/swagger‐resurces/cofiguration/ui","/swagger‐resources","/swagger‐resources/configuration/ecurity","/swagger‐}注意通過上邊的配置雖然可以swgr-i,但是無法進(jìn)行單元測(cè)試,除非去掉認(rèn)證的配置或在上邊配置中添加所有請(qǐng)求均放行("/**")。3.43.4模式(ResourceOwnerPasswordCredentials)與碼模式的區(qū)別是申請(qǐng)令牌不再使用碼,而是直接并且此需要使用httpBasic認(rèn)證上邊參數(shù)使用x-www-form-urlencoded方式傳輸,使用postmanSpringSecurityOauth2提供校驗(yàn)令牌的端Get:參數(shù)token使用postman結(jié)果如下{{"companyId":"userpic":null,"user_name":"mrt","scope":["name":"utype":"id": "jti":"client_id":}exp:過期時(shí)間,long類型,距離1970年的秒數(shù)(newDate().getTime()可得到當(dāng)前時(shí)間距離1970年的毫秒數(shù))。user_name:用戶名client_id:客戶端Id,在oath_client_details中配置scope:客戶端范圍在oauth_client_details表中配置 、ameutype、id:這些字段是本認(rèn)證服務(wù)在SpringSecurity基礎(chǔ)上擴(kuò)展的用戶刷新令牌是當(dāng)令牌快過期時(shí)重新生成一個(gè)令牌,它于碼和生成令牌不同,刷新令牌不需要碼也不需要賬號(hào)和,只需要一個(gè)刷新令牌、客戶端i和客戶端。測(cè)試如下:grant_type:固定為JWTJWT問題傳統(tǒng)方法的問題是用戶每次請(qǐng)求資源服務(wù),資源服務(wù)都需要攜帶令牌認(rèn)證服務(wù)去校驗(yàn)令牌的,并據(jù)令牌獲取用戶的相關(guān)信息,性能低下。解決什么是JSONebon(JWT)是一個(gè)開放的行業(yè)標(biāo)準(zhǔn)(RFC7519),它定義了一種簡介的、自包含的協(xié)議格式,用于在通信雙方傳遞json對(duì)象,傳遞的信息經(jīng)過數(shù)字簽名可以被驗(yàn)證和信任。JWT可以使用HMC算法或使用SA的公鑰/私鑰對(duì)來簽名,防止被篡改。標(biāo)準(zhǔn):1、JWT令牌較長,占空間比較大頭部包括令牌的類型(即JWT)及使用的哈希算法(如HMACSHA256或RSA){{"alg":"typ":}第二部分是負(fù)載,內(nèi)容也是一個(gè)js對(duì)象,它是存放有效信息的地方,它可以存放jw提供的現(xiàn)成字段,比如:iss(簽發(fā)者),xp(過期時(shí)間戳),su(面向的用戶)等,也可自定義字段。最后將第二部分負(fù)載使用Base64Ur編碼,得到一個(gè)字符串就是JWT令牌的第二部分。{{"sub": "name":456","admin":tue}這個(gè)部分使用ase4rl將前兩部分進(jìn)行編碼,編碼后使用點(diǎn)()連接組成字符串,最后使用hadr中簽名算法進(jìn)行簽名。一個(gè)例子base64UrlEncode(header)+"."+base64UrlEncode(header):jwt令牌的第一部分。base64UrlEncode(payload):jwt令牌的第二部分。JWTSpringSecurity提供對(duì)JWT的支持,本節(jié)我們使用SpringSecurity提供的wHlr來創(chuàng)建JWT令牌,校驗(yàn)JWT令牌下邊命令生成密鑰,采用RSA算法每個(gè)包含公鑰和私keytool-genkeypair-aliasxckey-keyalgRSA-keypassxuecheng-keystorexc.keystore-storepassKeytool是一個(gè)java提供的管理工-keypass:密鑰查詢信息keytool-list-keystorxc.keyst刪除keytool-delete-aliasxckey-keystore2、導(dǎo)出公安 安裝資 keytoolkeytool‐list‐rfc‐‐keystorexc.keystore|opensslx509‐informpem下邊這一段就是公鑰內(nèi)容-----BEGINPUBLICKEY----- PgLnbQczBHbBug6uOr78qnWsYxHlW6Aa5dI5NsmOD4DLtSw8eX0hFyK5Fmz2yMJePDqUi0JYS2r0iIo7n8vN7s83v5uOQIDAQAB-----ENDPUBLICKEY-----生成jwt令publicvoid 文Stringkey_location=//密鑰Stringkeystore_password= 路ClassPathResourceresource=new//密鑰工KeyStoreKeyFactorykeyStoreKeyFactory=newKeyStoreKeyFactory(resource,//密鑰 , 和別名要匹StringStringkeypassword=//Stringalias=//密鑰對(duì)(密鑰和公鑰KeyPairkeyPair=RSAPrivateKeyaPrivate=(RSAPrivateKey)Map<String,Object>tokenMap=newHashMap<>();tokenMap.put("id","123");tokenMap.put("name",tokenMap.put("roles",tokenMap.put("ext",//生成jwtJwtjwt=JwtHelper.encode(JSON.toJSONString(tokenMap),new//取出jwtStringtoken=jwt.getEncoded();}驗(yàn)證jwt令////資源服務(wù)使用公鑰驗(yàn)證jwt ,并對(duì)publicvoidStringtoken48pJB5f‐le2zgYMqR1L2LyTmrbRdRxkrQfsa1j8IW2T4eUiN3f9wF9JxUK1//Stringpublicky="‐‐‐‐‐BEGINPUBLIC OQIDAQAB‐‐‐‐‐ENDPUBLICKEY‐‐‐‐‐";//校驗(yàn)Jwtjwt=JwtHelper.decodeAndVerify(token,new//獲取jwt原始Stringclaims=//jwt令Stringencoded=jwt.getEncoded();}認(rèn)證接口開用戶登錄的流程執(zhí)行流程 、由于jwt令牌過長,不宜在 中,所以將jt令牌在i,由客戶端請(qǐng)求服務(wù)端獲取并在客戶端存儲(chǔ)。Redis配安裝1、安裝Redis服 redis‐serverredis‐server出現(xiàn)下圖說明redisredis‐serverredis‐server‐‐service‐installredis.windows‐service.conf‐‐loglevel 卸載服務(wù):redis-server.exe--service-開啟服務(wù):redis-server.exe--service-停止服務(wù):redis-server.exe--service-2、redis-desktop- 連接成功redis連接配name:host:${REDIS_HOST:}port:${REDIS_PORT:6379}timeout:5000#連接超時(shí)毫秒maxActive:maxIdle:minIdle:maxWait:‐1#連接池最大等行時(shí)間‐1沒有限制測(cè)publicclassRedisTest{privateStringRedisTemplatestringRedisTemplate;publicvoid//定義Stringkey=//定義Map<String,String>mapValue=newHashMap<>(); Stringvalue=//向redis 字符stringRedisTemplate.boundValueOps(key).set(value,60, 過期時(shí)間,已過期返回Longexpire=//根據(jù)key獲取Strings=stringRedisTemplate.opsForValue().get(key);}}需求分認(rèn)證服務(wù)需要實(shí)現(xiàn)的功能如1、登錄接前端pst提交賬號(hào)、等,用戶校驗(yàn)通過,生成令牌,并將令牌到i。將令牌寫入。2、退出接刪除中的令牌業(yè)務(wù)流程如下Api接@Api(value="@Api(value="用戶認(rèn)證",description="用戶認(rèn)證接口")publicinterfaceAuthControllerApi{@ApiOperation("登錄publicLoginResultlogin(LoginRequest@ApiOperation("退出publicResponseResult}配置參在application.ymltokenValiditySeconds:1200 到redis的過期時(shí)clientId:XcWebAppclientSecret:XcWebApp:MaxAge:申請(qǐng)令牌測(cè)為了不破壞SigSecuity的代碼,我們?cè)赟ric方法中通過Rstemlat請(qǐng)求SpngSecuiy所的申請(qǐng)令牌接口來申請(qǐng)令牌,下邊是測(cè)試代碼:publicclassTestClient{LoadBalancerClientRestTemplatepublicvoid//采用客戶端負(fù)載均衡,從eureka獲取認(rèn)證服務(wù)的ip和端ServiceInstanceserviceInstance=URIuri=StringauthUrl=//URIurl,HttpMethodmethod,HttpEntity<?>requestEntity,Class<T>//url就是申請(qǐng)令牌的url//methodhttp的方法類//requestEntity//responseType,將響應(yīng)的結(jié)果生成的類//請(qǐng)求的內(nèi)容//1、header信息,包括了httpbasicMultiValueMap<String,String>headers=newLinkedMultiValueMap<String,String>();Stringhttpbasic=httpbasic("XcWebApp","XcWebApp");//"Basicheaders.add("Authorization",//2、包括:grant_type、username、MultiValueMap<String,String>body=newLinkedMultiValueMap<String,String>(); HttpEntity<MultiValueMap<String,String>>multiValueMapHttpEntity=newHttpEntity<MultiValueMap<String,String>>(body,headers);//指 restTemplate當(dāng)遇到400或401響應(yīng)時(shí)候也不要拋出異常,也要正常返回restTemplate.setErrorHandler(newDefaultResponspublicvoidhandleError(ClientHttpRespnseesponse)throwsIOException//當(dāng)響應(yīng)的值為400或401時(shí)候也要正常響應(yīng),不要拋出異if(response.getRawStatusCode()!=400&&respnsegetRawStatusCode()!=401){}} 調(diào)用申請(qǐng)令ResponseEntity<Map>exchange=restTemplate.exchange(authUrl,HttpMethod.POST,multiValueMapHttpEntity,Map.class);Mapbody1=exchange.getBody();}privateStringhttpbasic(StringclientId,String//將客戶端id和客戶 拼接,按“客戶端id:客戶 Stringstring=//進(jìn)行base64編byte[]encode=Base64.encode(string.getBytes());return"Basic"+newString(encode);}}調(diào)用認(rèn)證服務(wù)申請(qǐng)令牌,并將令牌到redis。創(chuàng)建AuthToken模型類,申請(qǐng)的令牌,包括令牌、刷新令牌、jwt令牌publicclassAuthToken{Stringaccess_token;//tokenStringrefresh_token;//刷新tokenStringjwt_token;//jwt令牌}publicclassAuthServiceprivatestaticfinalLoggerLOGGER=LoggerFactory.getLogger(AuthService.class);intRestTemplaterestTemplate;LoadBalancerClientloadBalancerClient;StringRedisTemplate//認(rèn)證方publicAuthTokenlogin(Stringusername,Stringpassword,StringclientId,String//申請(qǐng)令A(yù)uthTokenauthToken=applyToken(username,password,clientId,clientSecret);if(authToken==null){}//將 到Stringaccess_token=authToken.getAccess_token();Stringcontent=JSON.toJSONString(authToken);booleansaveTokenResult=saveToken(access_token,content,}return} 令牌到privatebooleansaveToken(Stringaccess_token,Stringcontent,long//令牌名Stringname="user_token:"+//保存到令牌到 //獲取過期時(shí)Longexpire=stringRedisTemplate.getExpire(name);returnexpire>0;}//認(rèn)證方privateAuthTokenapplyToken(Stringusername,Stringpassword,StringclientId,String//選中認(rèn)證服務(wù)的地ServiceInstanceserviceInstance=if(serviceInstance=={LOGGER.error("chooseanauthinstancefai}//獲取令牌的Stringpath=serviceInstance.getUri().toStrng()+//定義MultiValueMap<String,String>formData=new 方formData.add("grant_type",formData.add("password",//定義MultiValueMap<String,String>header=newLinkedMultiValueMap<>();header.add("Authorization",httpbasic(clientId,clientSecret));//指 restTemplate當(dāng)遇到400或401響應(yīng)時(shí)候也不要拋出異常,也要正常返回restTemplate.setErrorHandler(newpublicvoidhandleError(ClientHttpResponseresponse)throwsIOException//當(dāng)響應(yīng)的值為400或401時(shí)候也要正常響應(yīng),不要拋出異if(response.getRawStatusCode()!=400&&response.getRawStatusCode()!=401){}}Mapmap=null;try{//http請(qǐng)求springsecurity的申請(qǐng)令牌接ResponseEntity<Map>mapResponseEntity=restTemplate.exchange(path,newHttpEntity<MultiValueMap<String,String>>(formData,header),Map.class);map=mapResponseEntity.getBody();newHttpEntity<MultiValueMap<String,String>>(formData,header),Map.class);map=mapResponseEntity.getBody();}catch(RestClientException{LOGGER.error("requestoauth_token_passworderror:{}",e.getMessage());}if(map==nullmap.get("access_token")==null||map.get("refresh_token")==null||map.get("jti")==null){//jti是jwt令牌的唯一標(biāo)識(shí)作為用 令}Auth
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)自動(dòng)化技術(shù)的進(jìn)步及產(chǎn)業(yè)應(yīng)用
- 工業(yè)設(shè)計(jì)與產(chǎn)品市場(chǎng)定位的協(xié)同發(fā)展
- 工業(yè)設(shè)計(jì)與產(chǎn)品創(chuàng)新的關(guān)系
- 工作中的創(chuàng)新思維方法與應(yīng)用
- 工作與生活平衡的實(shí)踐與思考
- 工作報(bào)告撰寫技巧與規(guī)范
- 工程機(jī)械設(shè)計(jì)的綠色化及可持續(xù)性研究
- 工程機(jī)械動(dòng)載控制系統(tǒng)的設(shè)計(jì)與實(shí)踐
- 工程項(xiàng)目中信息化監(jiān)理服務(wù)模式創(chuàng)新
- 工程機(jī)機(jī)制造的現(xiàn)代化技術(shù)趨勢(shì)
- 2025年高考真題-語文(全國一卷) 無答案
- 2025年外研版(2024)初中英語七年級(jí)下冊(cè)期末考試測(cè)試卷及答案
- 兵團(tuán)開放大學(xué)2025年春季《公共關(guān)系學(xué)》終結(jié)考試答案
- 2024年貴州貴州貴安發(fā)展集團(tuán)有限公司招聘筆試真題
- 2025年中考語文押題作文范文10篇
- 拆遷名額轉(zhuǎn)讓協(xié)議書
- 2025年初中學(xué)業(yè)水平考試地理試卷(地理學(xué)科核心素養(yǎng))含答案解析
- 《重大電力安全隱患判定標(biāo)準(zhǔn)(試行)》解讀與培訓(xùn)
- 《人工智能基礎(chǔ)與應(yīng)用》課件-實(shí)訓(xùn)任務(wù)18 構(gòu)建智能體
- 人工智能筆試題及答案
- 《老年人運(yùn)動(dòng)認(rèn)知風(fēng)險(xiǎn)綜合征健康管理中國專家共識(shí)2025》解讀
評(píng)論
0/150
提交評(píng)論