前言
在 ASPX 中如何取得 Azure AD 使用者的 Token 呢?
當使用者按下登入時,跳轉到 Azure AD 登入頁,讓使用者輸入帳/密後,
轉回本系統驗證沒問題後,設定使用者登入(FormsAuthentication)
實作
1.註冊 App
要使用 Azure AD 登入要先在 Microsoft Entra ID 的 App registrations 新增一個 App,
並設定 Redirect URI。建立好之後,可以在Overview中看到需要的許多資訊,Application (client) ID
, Directory (tenant) ID
…
因為是 ASPX ,所以走 OAuth 2.0 Code Flow,需要 authorization endpoint
及 token endpoint
。
可以按下Endpoints就可以知道它們的 URL,如下,
2.secrets
取回 Token 需要有client_secret
,所以到Certificates & secrets,
建立一個Client secret,建立好之後要馬上將Value複制下來。
3.程式-轉址到 Azure AD 登入頁
當 App 準備完成後,就可以將 App 的資訊寫到設定檔中,讓程式呼叫使用。所以在 aspx.cs
中設定變數值如下,
1 | private string _clientId = "你的clientId"; |
如果需要refresh_token
, scopes
可多加上offline_access
然後畫面的 Button 按下登入的 Click 事件中,要組出 Redirect 到 authorize 的 URL,如下,
1 | var state = Guid.NewGuid().ToString(); |
state
記在 Session 中等 Azure AD 登入完成後,轉址回來時,要驗證是否一致。
3.程式-接收 Azure AD 回傳的 Code
在 Page_Load 的 Get 時,判斷是否有state
及code
參數,
如果存在驗證state
相同後,取得code
,再透過code
來取回Token資訊,如下,
1 | protected void Page_Load(object sender, EventArgs e) |
1 | private void ProcLoginByCode(string code) |
要顯示 Token 中 Claims 的內容,可以透過JwtSecurityToken
,
1 | private void ShowIdTokenClaims() |
如果要登入,則清空 Session 值並登出,如下,
1 | Session["idToken"] = string.Empty; |
參考資源
OAuth 2.0 - Authorization Code Flow
Microsoft 身分識別平台和 OAuth 2.0 授權碼流程
一言既出,駟馬難追: 一個人說出去的話,都要負責任,決不可中途變卦。