問題描述
實(shí)現(xiàn)部署NodeJS Express應(yīng)用在App Service Linux環(huán)境中绝淡,并且使用Microsoft Authentication Library(MSAL)來實(shí)現(xiàn)登錄Azure AD用戶,獲取Token及用戶信息的實(shí)現(xiàn)奢讨。
終極實(shí)現(xiàn)效果展示:
本實(shí)現(xiàn)中,最重要的兩個步驟為:
1)根據(jù)文檔“ Tutorial: Sign in users and acquire a token for Microsoft Graph in a Node.js & Express web app” 實(shí)現(xiàn)本地運(yùn)行成功
2)根據(jù)文檔" 在 Azure 中創(chuàng)建 Node.js Web 應(yīng)用 " 把應(yīng)用部署在App Service Linux環(huán)境中,然后在Configuration中添加Application Setting(REDIRECT_URI 和 POST_LOGOUT_REDIRECT_URI)
實(shí)驗(yàn)步驟
第一步:創(chuàng)建本地NodeJS Express + MSAL 項(xiàng)目
在第一個文檔中端衰,主要的步驟有(文檔鏈接:https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-nodejs-webapp-msal)
如果想自己寫代碼叠洗,則必看。如果不用寫代碼旅东,可以在文中下載源代碼灭抑。但也必看1,4兩部分內(nèi)容抵代。
-
Register the application in the Azure portal
-
Create an Express web app project
-
Install the authentication library packages
-
Add app registration details
-
Add code for user login
-
Test the app
根據(jù)文檔腾节,主要注意修改的地方有兩處:
一:.env環(huán)境變量文件中的相應(yīng)值需要根據(jù)在Azure AD中注冊的內(nèi)容修改』珉梗可以參考以下內(nèi)容(本文實(shí)現(xiàn)在中國區(qū)Azure案腺,所以相關(guān)endpoint都為中國區(qū)Azure終結(jié)點(diǎn))
CLOUD_INSTANCE=https://login.partner.microsoftonline.cn/ # cloud instance string should end with a trailing slash
TENANT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx #Enter_the_Tenant_Info_Here
CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx # Enter_the_Application_Id_Here
CLIENT_SECRET=x-x.xxxxxxxxxxxx # Enter_the_Client_Secret_Here
REDIRECT_URI=http://localhost:3000/auth/redirect
POST_LOGOUT_REDIRECT_URI=http://localhost:3000
GRAPH_API_ENDPOINT=https://microsoftgraph.chinacloudapi.cn/ # graph api endpoint string should end with a trailing slash
EXPRESS_SESSION_SECRET=Enter_the_Express_Session_Secret_Here
- CLOUD_INSTANCE:根據(jù)使用的Azure環(huán)境決定,如果是中國區(qū)Azure康吵,則是https://login.partner.microsoftonline.cn/ 劈榨,如果是全球Azure,則是 https://login.microsoftonline.com/ 涎才,更多請見:https://docs.microsoft.com/en-us/azure/active-directory/develop/authentication-national-cloud
- TENANT_ID:應(yīng)為在Azure AD中所注冊應(yīng)用的Tenant ID
- CLIENT_ID:應(yīng)為在Azure AD中所注冊應(yīng)用的Application ID
- CLIENT_SECRET:將此值替換為先前創(chuàng)建的客戶端機(jī)密鞋既。 若要生成新密鑰,請?jiān)?Azure 門戶的應(yīng)用注冊設(shè)置中使用“證書和機(jī)密”
- REDIRECT_URI:訪問應(yīng)用時耍铜,指定回調(diào)頁面URL
- POST_LOGOUT_REDIRECT_URI:點(diǎn)擊Logout后邑闺,回調(diào)到主頁的設(shè)置
- GRAPH_API_ENDPOINT: Microsoft Graph API 的終結(jié)點(diǎn),中國區(qū)Azure為:https://microsoftgraph.chinacloudapi.cn/ 棕兼,全球Azure為:https://graph.microsoft.com/
-
EXPRESS_SESSION_SECRET:這是用于登錄Express Seesion 的機(jī)密陡舅,選擇一個隨機(jī)的字符串就可以,本實(shí)驗(yàn)中可以不用修改
image.png
(以上頁面由 https://portal.azure.cn/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps 頁面中選擇進(jìn)入)
二:文中在第5步中添加用戶登錄和獲取Token的部分伴挚,需要自己在項(xiàng)目 routes文件夾中添加 auth.js 文件靶衍,并輸入這一部分中的代碼。原文中這一點(diǎn)寫的不明確茎芋,如果對NodeJS項(xiàng)目不夠了解情況下颅眶,會遇見 cannot find module './routes/auth'的異常。
完整的代碼可從此處下載:https://files.cnblogs.com/files/lulight/ExpressWebApp.zip
第二步:部署到App Service For Linux環(huán)境并配置AAD參數(shù)
通過VS Code部署田弥,包含通過Kudu管理平臺查看home/site/wwwroot下的目錄文件
添加Application Setting REDIRECT_URI, POST_LOGOUT_REDIRECT_URI
修改Azure AD中注冊應(yīng)用的Redirect URL : https://<your app service name>.chinacloudsites.cn/auth/redirect
演示動畫如下:
參考資料
Tutorial: Sign in users and acquire a token for Microsoft Graph in a Node.js & Express web app: https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-nodejs-webapp-msal
在 Azure 中創(chuàng)建 Node.js Web 應(yīng)用:https://docs.azure.cn/zh-cn/app-service/quickstart-nodejs?tabs=linux&pivots=development-environment-vscode#deploy-to-azure
Quickstart: Register an application with the Microsoft identity platform:https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app
Azure China developer guide: https://docs.microsoft.com/en-us/azure/china/resources-developer-guide
當(dāng)在復(fù)雜的環(huán)境中面臨問題涛酗,格物之道需:濁而靜之徐清,安以動之徐生偷厦。 云中商叹,恰是如此!
分類: 【Azure 應(yīng)用服務(wù)】, 【Azure 環(huán)境】, 【Azure Developer】
標(biāo)簽: App Service, App Service Linux NodeJS Express, NodeJS項(xiàng)目使用MSAL實(shí)現(xiàn)AAD用戶登錄驗(yàn)證