如何在onelogin中使用OpenIdConnectImplicitFlow

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

成都創(chuàng)新互聯(lián)主營(yíng)定邊網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都App定制開發(fā),定邊h5重慶小程序開發(fā)公司搭建,定邊網(wǎng)站營(yíng)銷推廣歡迎定邊等地區(qū)企業(yè)咨詢

OpenId Implicit Flow

Implicit Flow也叫做隱式授權(quán)

如何在onelogin中使用OpenId Connect Implicit Flow

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

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

在隱式授權(quán)模式,一般用在app或者websites沒有后臺(tái)邏輯的情況。也就是說所有的授權(quán)都是在前端完成的。

尤其對(duì)于那種單頁面應(yīng)用來說,隱式授權(quán)模式特別有用。

我們?cè)倏匆幌略趏nelogin中的隱式授權(quán)流程:

如何在onelogin中使用OpenId Connect Implicit Flow

  1. 用戶嘗試建立和你的client app的連接,這個(gè)請(qǐng)求將會(huì)重定向到onelogin,并且?guī)吓渲玫奈ㄒ籧lient_id。

  2. onelogin將會(huì)對(duì)用戶信息進(jìn)行認(rèn)證和授權(quán)。

  3. 授權(quán)過后的用戶信息將會(huì)以id_token (JWT)的形式,傳遞給onelogin中配置的回調(diào)地址。

  4. client app使用onelogin的public key對(duì)id_token進(jìn)行校驗(yàn),如果一切ok,那么將會(huì)建立好連接。

我們考慮下隱式授權(quán)模式的安全性。

在隱式授權(quán)模式下,client app需要從onelogin獲取到公鑰,然后使用這個(gè)公鑰去解析onelogin返回的id_token。

雖然惡意用戶可能獲取到client_id和onelogin的公鑰,但是返回的id_token只會(huì)發(fā)給配置好的callback地址,所以仍然是安全的。

創(chuàng)建onelogin的配置

雖然我們?cè)谇懊娴奈恼轮性趏nelogin中創(chuàng)建了一個(gè)app,因?yàn)閏allback的不同,我們這里新創(chuàng)建一個(gè)app。

填上我們的callback地址: http://localhost:3000

其他的和之前的配置保持一致。

我們看下最新的SSO配置:

如何在onelogin中使用OpenId Connect Implicit Flow

這里我們需要保存最新的client_ID,因?yàn)椴皇茿uthentication Flow模式,我們不需要用到client_secret。

注意這里的兩個(gè)Issuer URLs,這里存儲(chǔ)的是onelogin的配置信息。

頁面的運(yùn)行和請(qǐng)求流程

我們從onelogin的官網(wǎng)例子中下載隱式授權(quán)的單頁面應(yīng)用。

https://github.com/onelogin/onelogin-oidc-node/tree/master/2.%20Implicit%20Flow

在javascript/main.js中修改OIDC的配置:

const ONELOGIN_CLIENT_ID = '90a0e970-f2b6-0138-6171-0a5535c40b31178911';
const ONELOGIN_SUBDOMAIN = 'flydean-dev';

然后運(yùn)行npm install;npm start來啟動(dòng)這個(gè)單頁面的應(yīng)用程序。

如何在onelogin中使用OpenId Connect Implicit Flow

點(diǎn)擊login按鈕,將會(huì)跳轉(zhuǎn)到onelogin的登錄界面:

如何在onelogin中使用OpenId Connect Implicit Flow

輸入用戶名密碼,我們會(huì)跳回localhost頁面。

這里我們會(huì)調(diào)用 https://flydean-dev.onelogin.com/oidc/2/certs 去拿到onelogin的公鑰。

通過個(gè)這個(gè)公鑰和返回的id_token,就可以拿到用戶的信息。

如何在onelogin中使用OpenId Connect Implicit Flow

關(guān)鍵代碼

因?yàn)槭菃雾撁鎽?yīng)用,所有的請(qǐng)求其實(shí)都是通過JS來執(zhí)行的。我們看下系統(tǒng)的關(guān)鍵代碼。

為了使用openid協(xié)議,這里的例子使用了oidc-client.min.js,通過這個(gè)客戶端來進(jìn)行openid協(xié)議的連接工作。

下面是頁面的openid connect配置信息:

var settings = {    
    authority: 'https://' + ONELOGIN_SUBDOMAIN + '.onelogin.com/oidc/2',
    client_id: ONELOGIN_CLIENT_ID,
    redirect_uri: window.location.origin,
    response_type: 'id_token token',
    scope: 'openid profile',

    filterProtocolClaims: true,
    loadUserInfo: true
};

有了這些配置信息,我們就可以創(chuàng)建oidc的manager:

var mgr = new Oidc.UserManager(settings);

關(guān)鍵代碼很簡(jiǎn)單,點(diǎn)擊login的時(shí)候,需要進(jìn)行頁面跳轉(zhuǎn)到onelogin進(jìn)行授權(quán)登錄:

function redirectToLogin(e) {
  e.preventDefault();

  mgr.signinRedirect({state:'some data'}).then(function() {
      console.log("signinRedirect done");
  }).catch(function(err) {
      console.log(err);
  });
}

授權(quán)完成之后,跳轉(zhuǎn)回本機(jī)頁面之后,需要校驗(yàn)回調(diào)信息,并從該信息中解析出用戶的信息,并展示在頁面上:

function processLoginResponse() {
  mgr.signinRedirectCallback().then(function(user) {
      console.log("signed in", user);

      document.getElementById("loginResult").innerHTML = '<h4>Success</h4><pre><code>' + JSON.stringify(user, null, 2) + '</code></pre>'

  }).catch(function(err) {
      console.log(err);
  });
}

所有的邏輯都封裝在oidc-client.min.js,對(duì)程序員非常友好。

“如何在onelogin中使用OpenId Connect Implicit Flow”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

新聞名稱:如何在onelogin中使用OpenIdConnectImplicitFlow
網(wǎng)址分享:http://bm7419.com/article20/jcesco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、網(wǎng)站制作企業(yè)網(wǎng)站制作、微信公眾號(hào)、靜態(tài)網(wǎng)站、服務(wù)器托管

廣告

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

網(wǎng)站托管運(yùn)營(yíng)