本系列文之後也會置於個人網站
昨天,已經完成了一部分配置,且也已經可以建立帳號並登入了。
不過,這只能算是半套,而今天要在來完成另外半套。
你可以按照昨天的做法,重新建立一個新的Client。
只是注意在建立的時候,「Root URL」改爲: http://localhost:4200
。
今天,我們要自己實現一個前端網頁去的Web App,然後綁定Keycloak去做登入。
前置要求:
前面說過,Keycloak的Client實際上並不是真正的Client Application,只是做了一些關聯。
今天就要來 快速開始 個自己的Web App。而首先,需要先調整Client的關聯:
這此調整主要做兩個修改:
https://www.keycloak.org/
或https://www.keycloak.org/app/
都改爲http://localhost:4200/
。最終設定的結果如下:
on
http://localhost:4200/
http://localhost:4200/*
http://localhost:4200/
)http://localhost:4200/
其實我一度在思考要不要使用Parcel去建立,這樣連Angular的入門門檻都沒有了。
不過爲了方便撰寫,最後還是決定先使用Angular來介紹。
ng new my-quick-start-app
下面是我在建立新應用時的選項。今天的例子中,不會使用到 Android routing。
同樣使用什麼 Stylesheet 也不會影響到今天的 快速開始 。
如果你打算透過本範例繼續開始其他應用,可以自行選擇自己熟悉的。
cd my-quick-start-app
npm i oidc-client
快速開始 也就只有-oidc-client
-這麼一個相依套件而已。夠簡單吧?!
現在,就來做一些設定,使我們的網頁前端(Web App)綁定Keycloak,去做身份驗證與授權吧。
開啓my-quick-start-app/src/environments/environment.ts
,改爲以下設定內容:
import { UserManagerSettings, WebStorageStateStore } from 'oidc-client'
const userManagerSettings: UserManagerSettings = {
authority: 'http://localhost:8080/auth/realms/quick-start',
client_id: 'my-quick-start-app',
redirect_uri: 'http://localhost:4200/',
response_type: 'id_token',
userStore: new WebStorageStateStore({ store: window.localStorage }),
loadUserInfo: true,
post_logout_redirect_uri: 'http://localhost:4200/',
}
export const environment = {
production: false,
userManagerSettings,
};
然後開啓my-quick-start-app/src/app/app.component.html
,將內容全部移除後,改爲以下內容:
<h1>用Keycloak學習身份驗證與授權</h1>
<pre>
{{ user | json }}
</pre>
<button (click)="onClickLoginBtn($event)">login</button>
<br/>
<button (click)="onClickLogoutBtn($event)">logout</button>
是的,作爲本系列第一個簡單的範例,「快速開始」只需要登入、登出的按鈕即可。
此外,也就只有一個顯式登入狀態的使用者訊息而已(user
)。
最後,開啓my-quick-start-app/src/app/app.component.ts
,同樣直接改成以下內容:
import { Component } from '@angular/core';
import { environment } from 'src/environments/environment';
import { UserManager, User } from 'oidc-client';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
title = 'my-quick-start-app';
userManager: UserManager = new UserManager(environment.userManagerSettings);
user: User|null = null;
constructor() {
this.userManager.signinRedirectCallback().then(user =>{
this.userManager.storeUser(user);
this.user = user;
}, error => {
console.error(error);
});
this.userManager.getUser().then(user => {
this.user = user;
}, error => {
console.error(error)
})
}
onClickLoginBtn(event: MouseEvent) {
this.userManager.signinRedirect();
}
onClickLogoutBtn(event: MouseEvent) {
this.userManager.signoutRedirect();
}
}
最爲 快速開始 ,也就先不解釋所設定的事件與邏輯吧!
現在,回到專案目錄下執行:
npm start
在經過一小段時間的處理後,應該會看到以下內容
✔ Browser application bundle generation complete.
Initial Chunk Files | Names | Size
vendor.js | vendor | 2.66 MB
polyfills.js | polyfills | 128.52 kB
main.js | main | 12.42 kB
runtime.js | runtime | 6.64 kB
styles.css | styles | 1.18 kB
| Initial Total | 2.81 MB
Build at: 2021-09-01T11:59:53.481Z - Hash: ab7e8c94ca54734b4e11 - Time: 10423ms
** Angular Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ **
✔ Compiled successfully.
現在用瀏覽器開啓 http://localhost:4200/
你會看到我們所建立的非常簡單地畫面:
點選登入後,會跳到keycloak登入。你同樣可以使用bob
這個之前建立的帳號登入:
登入過後就可以看到帳號的相關訊息。而登出後,則會回到一開始的結果。
現在,你已經知道keycloak最基礎的用法,你可以開始依照自己的需求開發應用。或是繼續閱讀本系列文章,學習相關規範和更多關於keycloak的使用。
實際上你不一定要使用 oidc-client 。實際上keycloak也有提供相關的套件,更甚者,在更了解OAuth之後,也不一定非要使用 oidc-client ,你可以自己選擇實現方式,了解後也比較容易除錯。