欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

什么是SSO的通用標(biāo)準(zhǔn)OpenIDConnect

本篇內(nèi)容介紹了“什么是SSO的通用標(biāo)準(zhǔn)OpenID Connect”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

在陽泉等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),成都營銷網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè)公司,陽泉網(wǎng)站建設(shè)費(fèi)用合理。

簡介

OpenID Connect簡稱為OIDC,已成為Internet上單點(diǎn)登錄和身份管理的通用標(biāo)準(zhǔn)。 它在OAuth3上構(gòu)建了一個(gè)身份層,是一個(gè)基于OAuth3協(xié)議的身份認(rèn)證標(biāo)準(zhǔn)協(xié)議。

OAuth3實(shí)際上只做了授權(quán),而OpenID Connect在授權(quán)的基礎(chǔ)上又加上了認(rèn)證。

OIDC的優(yōu)點(diǎn)是:簡單的基于JSON的身份令牌(JWT),并且完全兼容OAuth3協(xié)議。

今天我們將會介紹一下OIDC的具體原理。

OpenID Connect是什么

OpenID Connect發(fā)布于2014年,是建立在OAuth 2.0協(xié)議之上的簡單身份層,它允許客戶端基于授權(quán)服務(wù)器或身份提供商(IdP)進(jìn)行的身份驗(yàn)證來驗(yàn)證最終用戶的身份,并獲得用戶的相關(guān)信息。

OpenID Connect提供了RESTful HTTP API,并使用Json作為數(shù)據(jù)的傳遞格式。

之前我們講到了基于XML格式的SAML協(xié)議,而OpenID Connect因?yàn)槠涓雍啙嵉臄?shù)據(jù)交換格式,被越來越多的應(yīng)用使用,已經(jīng)成為事實(shí)上的標(biāo)準(zhǔn)。

我們看一下OpenID connect的基本流程:

什么是SSO的通用標(biāo)準(zhǔn)OpenID Connect

  1. RP(client)發(fā)送一個(gè)認(rèn)證請求到 OpenID Provider(OP)。

  2. OP對End User進(jìn)行認(rèn)證并獲得相應(yīng)的授權(quán)。

  3. OP返回一個(gè)ID Token或者access Token給RP。

  4. RP使用access token向UserInfo Endpoint請求用戶信息。

  5. UserInfo Endpoint返回相應(yīng)的用戶信息給RP。

ID Token

ID Token就像是一個(gè)用戶的身份證,它是以JWT格式存在的,并且由OP進(jìn)行簽名,保證它的安全性。

獲取ID Token的方式就是向OP發(fā)送認(rèn)證請求。

因?yàn)镮D Token是以JWT格式存在的,JWT可以分為三個(gè)部分,分別是Header,Payload和Signature。

這里我們主要關(guān)注一下Payload的json內(nèi)容:

{
  "sub"       : "alice",
  "iss"       : "https://openid.flydean.com",
  "aud"       : "client-12345",
  "nonce"     : "n-0S6_WzA2Mj",
  "auth_time" : 1311280969,
  "acr"       : "c2id.loa.hisec",
  "iat"       : 1311280970,
  "exp"       : 1311281970
}
  • sub = Subject Identifier:必須。iss提供的EU的唯一標(biāo)識;最長為255個(gè)ASCII個(gè)字符;

  • iss = Issuer Identifier:必須。提供認(rèn)證信息者的唯一標(biāo)識。一般是Url的host+path部分;

  • aud = Audience(s):必須。標(biāo)識ID-Token的受眾。必須包含OAuth3的client_id;

  • nonce:RP發(fā)送請求的時(shí)候提供的隨機(jī)字符串,用來減緩重放攻擊,也可以來關(guān)聯(lián)ID-Token和RP本身的Session信息。

  • auth_time = AuthenticationTime:EU完成認(rèn)證的時(shí)間。如果RP發(fā)送認(rèn)證請求的時(shí)候攜帶max_age的參數(shù),則此Claim是必須的。

  • acr = Authentication Context Class Reference:可選。表示一個(gè)認(rèn)證上下文引用值,可以用來標(biāo)識認(rèn)證上下文類。

  • iat = Issued At Time:必須。JWT的構(gòu)建的時(shí)間。

  • exp = Expiration time:必須。ID-Token的過期時(shí)間;

上面的是ID Token的標(biāo)準(zhǔn)Claims。

請求ID Token

現(xiàn)在我們知道了ID Token是什么,那么在OpenID Connect的RP客戶端如何請求一個(gè)ID Token呢?

雖然OpenID Connect并未指定應(yīng)如何實(shí)際驗(yàn)證用戶身份,這取決于提供者來決定。但是我們通常由Web瀏覽器來執(zhí)行認(rèn)證步驟。

瀏覽器將用戶重定向到認(rèn)證服務(wù)器的認(rèn)證窗口,用戶輸入用戶名和密碼之后,通過OAuth 2.0協(xié)議請求ID token。

使用OAuth 2.0來獲取ID Token有3種方式:

  1. Authorization Code模式

什么是SSO的通用標(biāo)準(zhǔn)OpenID Connect

Authorization Code流程的步驟如下:

客戶端準(zhǔn)備身份認(rèn)證請求,請求里包含所需要的參數(shù)

客戶端發(fā)送請求到授權(quán)服務(wù)器

授權(quán)服務(wù)器對最紅用戶進(jìn)行身份認(rèn)證

授權(quán)服務(wù)得最終用戶的統(tǒng)一/授權(quán)

授權(quán)服務(wù)器把最終用戶發(fā)送回客戶端,同時(shí)帶著授權(quán)碼

客戶端使用授權(quán)碼向Token端點(diǎn)請求一個(gè)響應(yīng)

客戶端接收到響應(yīng),響應(yīng)的Body里面包含在和ID Token和Access Token

客戶端驗(yàn)證ID Token,并獲得用戶的一些身份信息

  1. 隱式授權(quán)

什么是SSO的通用標(biāo)準(zhǔn)OpenID Connect

上圖就是一個(gè)隱式授權(quán)的例子,和Authorization Code模式不同的是,認(rèn)證服務(wù)器返回的是一個(gè)access token片段,只有這個(gè)片段,我們是無法得到access token的。

這里我們需要額外請求一次client resource服務(wù)器,服務(wù)器將會返回一個(gè)script腳本,通過這個(gè)腳本,我們對access token片段進(jìn)行解析,得到最終的access token。

  1. 混合模式

混合模式比較少用到,它是前面兩種模式的混合,它允許從前端和后端分別獲取token值。

ID Token可以做什么

那么我們拿到請求得到的ID Token可以做什么事情呢?

  1. 無狀態(tài)session,通過將token存儲在瀏覽器的cookie中,我們可以實(shí)現(xiàn)輕量級的無狀態(tài)會話。

服務(wù)器端不需要存儲會話信息,我們只需要在服務(wù)器端對token進(jìn)行驗(yàn)證即可。

  1. 可以將token傳遞給第三方,因?yàn)閠oken本身并不是敏感信息,所以我們可以將token傳遞給其他應(yīng)用程序或者后端服務(wù)。

  2. 令牌交互,我們可以通過ID Token去IdP服務(wù)器中請求access token,從而起到了交互token的目的。

Open Connect認(rèn)證碼授權(quán)的例子

這里我們舉一個(gè)使用認(rèn)證碼授權(quán)獲取到ID token的例子。

  1. RP通過重定向到OpenID Provider的OAuth 2.0認(rèn)證終端,來初始化一個(gè)用戶認(rèn)證。

下面是一個(gè)重定向的例子:

HTTP/1.1 302 Found
Location: https://openid.flydean.com/login?
          response_type=code
          &scope=openid
          &client_id=s6BhdRkqt3
          &state=af0ifjsldkj
          &redirect_uri=https%3A%2F%2Fclient.flydean.com%2Fcb
  • response_type:因?yàn)槲覀兪钦J(rèn)證碼模式,這里選擇code

  • scope:openid表示請求的是openid。

  • client_id:RP的client id,OP通過這個(gè)client_id來識別是否是可識別的RP。可以提前注冊或者提前約定。

  • state:RP生成的一個(gè)狀態(tài)標(biāo)準(zhǔn),主要為了防止攻擊。

  • redirect_uri:認(rèn)證完畢之后,跳轉(zhuǎn)的鏈接。

在OP端,將會檢測是否已經(jīng)存在一個(gè)有效的用戶session,否則將會彈出用戶登錄界面,讓用戶登錄。

什么是SSO的通用標(biāo)準(zhǔn)OpenID Connect

登錄成功之后,client將會重定向到redirect_uri,并帶上認(rèn)證碼:

HTTP/1.1 302 Found
Location: https://client.flydean.com/cb?
          code=SplxlOBeZQQYbYS6WxSbIA
          &state=af0ifjsldkj
  1. 使用code獲取ID token

上面返回的code只是一個(gè)中間產(chǎn)物,RP需要將code提交給OP換取ID token。

這次我們直接使用一個(gè)后端的POST請求:

POST /token HTTP/1.1
Host: openid.flydean.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW

grant_type=authorization_code
 &code=SplxlOBeZQQYbYS6WxSbIA
 &redirect_uri=https%3A%2F%2Fclient.flydean.com%2Fcb
  • grant_type:authorization_code表示是授權(quán)碼格式

  • code就是上面一步獲得的code

  • redirect_uri是callback url

如果成功,OP會返回一個(gè)JSON對象,帶有ID token, access token 或者 refresh token:

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
  "id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjFlOWdkazcifQ.ewogImlzc
    yI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ4Mjg5
    NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiAibi0wUzZ
    fV3pBMk1qIiwKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDEzMTEyODA5Nz
    AKfQ.ggW8hZ1EuVLuxNuuIJKX_V8a_OMXzR0EHR9R6jgdqrOOF4daGU96Sr_P6q
    Jp6IcmD3HP99Obi1PRs-cwh4LO-p146waJ8IhehcwL7F09JdijmBqkvPeB2T9CJ
    NqeGpe-gccMg4vfKjkM8FcGvnzZUN4_KSP0aAp1tOJ1zZwgjxqGByKHiOtX7Tpd
    QyHE5lcMiKPXfEIQILVq0pc_E2DzL7emopWoaoZTF_m0_N0YzFC6g6EJbOEoRoS
    K5hoDalrcvRYLSrQAZZKflyuVCyixEoV9GfNQC3_osjzw2PAithfubEEBLuVVk4
    XUVrWOLrLl0nx7RkKU8NXNHq-rvKMzqg"
  "access_token": "SlAV32hkKG",
  "token_type": "Bearer",
  "expires_in": 3600,
}

其中ID token的格式是JWT。

User Info

我們獲取到的ID token里面已經(jīng)包含了一些非常有用的claims信息。

事實(shí)上ID Token還可以包含其他的user info信息:

比如name,profile,picture,email,gender,birthdate,phone_number,address等等有用的信息。

我們可以在token請求的時(shí)候添加上額外的scope:

HTTP/1.1 302 Found
Location: https://openid.flydean.com/login?
          response_type=code
          &scope=openid%20email
          &client_id=s6BhdRkqt3
          &state=af0ifjsldkj
          &redirect_uri=https%3A%2F%2Fclient.flydean.com%2Fcb

比如上面的例子中,我們添加了額外的email信息,那么OP將會在token中加入email選項(xiàng)。

比如:

{
   "sub"                     : "alice",
   "email"                   : "alice@wonderland.net",
   "email_verified"          : true,
   "name"                    : "Alice Adams",
   "given_name"              : "Alice",
   "family_name"             : "Adams",
   "phone_number"            : "+86 18888888888",
   "profile"                 : "https://flydean.com/users/alice"
}

“什么是SSO的通用標(biāo)準(zhǔn)OpenID Connect”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

網(wǎng)頁名稱:什么是SSO的通用標(biāo)準(zhǔn)OpenIDConnect
本文地址:http://chinadenli.net/article38/gegssp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)網(wǎng)頁設(shè)計(jì)公司建站公司面包屑導(dǎo)航網(wǎng)站設(shè)計(jì)自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)