最近開始使用open ID進行驗證認證 , 我在找尋解決方案時發現了identityserver4 得這個集大成的open ID使用 套件 , 切可以很方便擴展公司內部所使用的AD認證 或者是Google認證LINE認證等方式, 那我們就開始簡單的介紹一下identityserver4實作的方式。
時間不足,這邊先放上Client端使用方式,其他部分後面再補上!
這邊選用oidc-client.js來做界接, 我們增加一個AuthService,準備來放入所需要使用的一些功能, 例如最基本的取得user資訊,登入、登出或者是登入後轉向的一個callback function。
整體流程 : 使用者進入需要驗證頁面→轉跳Idp驗證畫面→Idp轉跳至指定Callback頁面→接收使用者資訊並儲存
1. 先把 oidc-client裝起來
npm install oidc-client --save
2. 增加一個AuthService,並寫入相關程式
這邊我們的設定是用JSON格式放在VITE_IDP_CONFIG,所以我們用parse轉回
import { UserManager, WebStorageStateStore, User } from "oidc-client";
export default class AuthService {
private userManager: UserManager;
constructor() {
const settings : any = JSON.parse(import.meta.env["VITE_IDP_CONFIG"]as any) ;
settings['userStore'] = new WebStorageStateStore({ store: window.localStorage }),
this.userManager = new UserManager(settings);
console.log(this.userManager);
}
get getUser(): Promise<User | null> {
return this.userManager.getUser();
}
public login(): Promise<void> {
return this.userManager.signinRedirect();
}
public logout(): Promise<void> {
return this.userManager.signoutRedirect();
}
get signinRedirectCallback():Promise<object | null>{
return this.userManager.signinRedirectCallback();
}
}
3. 設定值
{
"authority":"http://192.168.0.101:9699",
"client_id":"Test",
"redirect_uri":"http://192.168.0.101:9600/#/callback?",
"response_type":"id_token token",
"scope":"openid profile WebAPI_Test",
"post_logout_redirect_uri":"http://192.168.0.101:9600/#/home"
}
4. 接下來只要在你要驗證的頁面中增加使用
const auth = new AuthService();
auth.getUser.then((user) => {
if (user !== null) {
onSignInGP(user);
} else {
Local.clear(); //全部清出
login();
}
});
5. 做出Callback頁面,提供Idp回傳相關資訊
<template>
<div>Please waitting...</div>
</template>
<script lang="ts">
import Oidc from 'oidc-client';
var mgr = new Oidc.UserManager({ response_mode: 'query', userStore: new Oidc.WebStorageStateStore() });
mgr
.signinRedirectCallback()
.then(function (user) {
window.location.href = '../';
console.log(user);
})
.catch(function (err) {
console.log(err);
});
export default {
name: 'callback',
setup() {
},
};
</script>
補充 :
如想要oidc callback時增加Querystring的話,在設定時增加extraQueryParams參數即可,使用範例如下:
mgr.signinRedirect({
extraQueryParams: {
redirect: "home"
},
});
可參考原問題 : https://stackoverflow.com/questions/63060295/oidc-extra-parameters-in-sign-in-url-query-string
文章標籤
全站熱搜
