有兩種方法可以獲取一個令牌,而不該用戶名&密碼,並沒有授權碼舞蹈提示的UI:
- 使用資源所有者密碼憑據流 - 這可以讓你通過用戶名和密碼到Azure AD。如果在認證流程中有任何額外的事情(同意,MFA,密碼重置),你只能得到一個失敗。
- 使用客戶端證書流程 - 這需要管理員同意。此外,你必須非常小心這個,因爲這個客戶端將有權訪問所有用戶的所有信息。這應該只用於安全的客戶端,而不是其他用戶可以訪問的客戶端。
下面是一個代碼片段,展示了這兩種:
import adal
import requests
tenant = "contoso.com"
client_id = "YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"
username = "[email protected]"
password = "mypassword"
authority = "https://login.microsoftonline.com/" + tenant
RESOURCE = "https://graph.microsoft.com"
context = adal.AuthenticationContext(authority)
# Use this for Client Credentials
#token = context.acquire_token_with_client_credentials(
# RESOURCE,
# client_id,
# client_secret
#)
# Use this for Resource Owner Password Credentials (ROPC)
token = context.acquire_token_with_username_password(RESOURCE, username, password, client_id);
graph_api_endpoint = 'https://graph.microsoft.com/v1.0{0}'
# /me only works with ROPC, for Client Credentials you'll need /<UsersObjectId/
request_url = graph_api_endpoint.format('/me')
headers = {
'User-Agent' : 'python_tutorial/1.0',
'Authorization' : 'Bearer {0}'.format(token["accessToken"]),
'Accept' : 'application/json',
'Content-Type' : 'application/json'
}
response = requests.get(url = request_url, headers = headers)
注:我再利用我的回答非常類似的問題:MS Graph authentication using python
Speedwise,Scrapy比硒快如果你找不到其他解決方案,我建議你看看scrapy。 –
我想你可能錯過了這個問題的要點? – elelias