0

我試圖從Python客戶端應用程序中從Azure AD獲取令牌。我希望用戶使用用戶名和密碼進行無縫驗證(client_id/secret將嵌入到應用程序中)。我註冊了我的應用程序,並給它的所有權限,並在新的門戶網站打出了「授予權限」按鈕,根據這個帖子:管理員尚未同意使用該應用程序 - Azure AD

The user or administrator has not consented to use the application - Send an interactive authorization request for this user and resource

我發送一個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,獲得令牌。

+0

你可以用Graph Explorer檢查你的oauth2PermissionGrants嗎?示例:https://graphexplorer.cloudapp.net/Home/Index/DemoCompany?UrlRequest=GET&text=https%3A%2F%2Fgraph.windows.net%2Fgraphdir1.onmicrosoft.com%2Foauth2PermissionGrants。查找您的應用的服務主體是否已被授予適當的資源訪問權限。 – juunas

+0

所以我不是100%確定我在這裏看到什麼,但是當我放入「https://graph.windows.net/{my_dir}/oauth2PermissionGrants時,我看到一個包含3個服務主體的」值「數組其中每一個都有一個clientID,其中沒有一個與我的應用的client_id相對應,猜測這可能是罪魁禍首?如果是這樣,我仍然不知道如何授予它。 – Progger

+0

客戶端ID實際上是對象ID服務主體:)所以,首先從servicePrincipals端點找到你的服務主體 – juunas

回答

2

根據您的評論:

我收到的消息說,做一個互動的請求,但是這正是我想避免,因爲這是一個Python應用程序沒有web瀏覽器和我努力避免複雜性。

我想你想構建一個守護進程應用程序或僅與Azure AD集成的應用程序應用程序。一般介紹可以參考https://graph.microsoft.io/en-us/docs/authorization/app_only

此外,您可以利用ADAL for Python輕鬆實現此功能。另外,您可以參考client_credentials_sample.py快速入門。

+0

因此,這讓我立即得到了一個令牌,我可以使用它從Graph獲取用戶的信息。唯一的問題是我無法弄清楚如何根據Graph驗證用戶的憑據。這可能嗎?理想情況下,我想要使用用戶的信用而不是client_id/secret獲取令牌,但不確定這是否可能。 – Progger

+0

如果您不想**交互式請求**,恐怕您需要定製一些額外的邏輯來實現此功能。您可以利用圖表API來匹配用戶信息和他的證書。 E.G https://graph.microsoft.io/en-us/docs/api-reference/v1.0/api/user_get –

+0

嗨,@progger,你有任何更新嗎?你解決了你的問題嗎? –

0

您應該嘗試以管理員身份登錄,以便能夠同意在租戶上使用該應用程序。

+0

所有這些都是使用管理員帳戶完成的,所以很不幸沒有幫助。 – Progger

相關問題