前言
Application 可以設定所需要的 Permissions,
再透過 Microsoft Graph API 去存取。
而所需的 Permissions ,可以區分成 Delegated 及 Application,
詳細可以參考 Microsoft Graph permissions reference。
大部份是設定 Delegated 的 Permissions 讓 End User 去做自已的事,
我們有個情境需要替使用者建立一個線上會議,所以需要的就是 Application 的 OnlineMeetings.ReadWrite.All Permission。
實作
1.在 Azure AD 註冊 App
所以可以依 Get access without a user 來註冊 App 並設定 User.Read.All(測試用) 及 OnlineMeetings.ReadWrite.All Permissions,並建立 App 的 Client secrets。
2.Grant admin consent
註冊好之後,請 Azure AD 管理人員到 Azure Active Directory -> App registrations 找到 註冊的 App ,
點選該 App ,再點選 API permissions 去 Grant admin consent
3.取回 App 的 Token
依 Get access without a user 的 4. Get an access token ,
依 Application (client) ID 及 Client secrets,Scope 給 https://graph.microsoft.com/.default 來取回 Token。
4.取得使用者資訊
依 Get access without a user 的 5. Use the access token to call Microsoft Graph ,拿上述取得的 Token 來取回使用者資資訊,
5.替某個使用者建立線上會議
依 Create onlineMeeting ,拿上述取得的 Token ,使用 POST /users/{user Object Id}/onlineMeetings
,為該使用者建立線上會議。
結果會出現 No Application Access Policy found for this app. 的錯誤。
那是因為,如果 App 要為使用者建立線上會議,需要依 Allow applications to access online meetings on behalf of a user 的設定。
以系統管理員身份開啟 Power Shell 視窗,連接到 Teams。
1 | Import-Module MicrosoftTeams |
註:如果沒有 MicrosoftTeams Module 請參考 Install Microsoft Teams PowerShell Module 安裝
建立 Application Access Policy ,並將 App 加入
1 | New-CsApplicationAccessPolicy -Identity "teams-meetings-policy" -AppIds "Application (client) ID" -Description "Allow applications to access online meetings on behalf of a user" |
設定某個使用者去套用 Application Access Policy
1 | Grant-CsApplicationAccessPolicy -PolicyName "teams-meetings-policy" -Identity "使用者的ObjectId" |
註:如果針對整個 tenant 可以設定
-Global
1 | Grant-CsApplicationAccessPolicy -PolicyName "teams-meetings-policy" -Global |
設定好之後,就可以透過 POST /users/{userId}/onlineMeetings
來幫該使用者建立線上會議
註:如果沒有設定使用者套用 Application Access Policy,則會出現 403 No Application Access Policy found for this app. 的錯誤
6.Application Access Policy 相關設定
增加 App 到 Policy
1 | Set-CsApplicationAccessPolicy -Identity "teams-meetings-policy" -AppIds @{Add="新的Application (client) ID"} |
從 Policy 移除 App
1 | Set-CsApplicationAccessPolicy -Identity "teams-meetings-policy" -AppIds @{Remove="要移的Application (client) ID"} |
設定 User 不套用 Access Policy
1 | Grant-CsApplicationAccessPolicy -Identity "使用者的ObjectId" -PolicyName $Null |
參考資料
Allow applications to access online meetings on behalf of a user
You can now create Microsoft Teams meetings as an application without a users needing to be present: here’s how to use Application Access Policy
Install Microsoft Teams PowerShell Module
Get access without a user
Create onlineMeeting
Manage Skype for Business Online with PowerShell