我試圖從Python客戶端應用程序中從Azure AD獲取令牌。我希望用戶使用用戶名和密碼進行無縫驗證(client_id/secret將嵌入到應用程序中)。我註冊了我的應用程序,並給它的所有權限,並在新的門戶網站打出了「授予權限」按鈕,根據這個帖子:管理員尚未同意使用該應用程序 - Azure AD
我發送一個HTTP POST到:
https://login.microsoftonline.com/{tenant_id}/oauth2/token
具有下列數據:
headers = {
"Content-Type": "application/x-www-form-urlencoded"
}
body = "resource={0}&grant_type=password&username={1}&password={2}&client_id={3}&client_secret={4}&scope=openid".format(app_id_uri,user,password,client_id,client_secret)
我似乎無法讓過去這個錯誤無論怎樣我嘗試:
b'{"error":"invalid_grant","error_description":"AADSTS65001: The user or administrator has not consented to use the application with ID \'078c1175-e384-4ac7-9116-efbebda7ccc2\'. Send an interactive authorization request for this user and resource.
同樣,我的目標:
用戶輸入用戶名/密碼,沒有別的。應用程序發送用戶/通過/ client_id/client_secret,獲得令牌。
你可以用Graph Explorer檢查你的oauth2PermissionGrants嗎?示例:https://graphexplorer.cloudapp.net/Home/Index/DemoCompany?UrlRequest=GET&text=https%3A%2F%2Fgraph.windows.net%2Fgraphdir1.onmicrosoft.com%2Foauth2PermissionGrants。查找您的應用的服務主體是否已被授予適當的資源訪問權限。 – juunas
所以我不是100%確定我在這裏看到什麼,但是當我放入「https://graph.windows.net/{my_dir}/oauth2PermissionGrants時,我看到一個包含3個服務主體的」值「數組其中每一個都有一個clientID,其中沒有一個與我的應用的client_id相對應,猜測這可能是罪魁禍首?如果是這樣,我仍然不知道如何授予它。 – Progger
客戶端ID實際上是對象ID服務主體:)所以,首先從servicePrincipals端點找到你的服務主體 – juunas