我在documentation之后使用Active Directory身份验证库进行python。之前我设法通过Acquire Token with Client Credentials sample获取了access_token:
import adal
RESOURCE_URI = 'https://<mydomain>.crm.dynamics.com'
AUTHORITY_URL = "https://login.microsoftonline.com/<tenant_id>"
CLIENT_ID = 'xxxx' #application_id
CLIENT_SECRET = 'xxxx'
context = adal.AuthenticationContext(AUTHORITY_URL)
token = context.acquire_token_with_client_credentials(
RESOURCE_URI,
CLIENT_ID,
CLIENT_SECRET)
print token
但是当我尝试Acquire token and Refresh token sample
时收到错误消息context = adal.AuthenticationContext(AUTHORITY_URL)
token = context.acquire_token_with_username_password(
RESOURCE_URI,
USERNAME,
PASSWORD,
CLIENT_ID)
print token
>>> adal.adal_error.AdalError: Get Token request returned http error: 401 and server response: {"error":"invalid_client","error_description":"AADSTS70002: The request body must contain the following parameter: 'client_secret or client_assertion'.........."correlation_id"......}
答案 0 :(得分:0)
adal.adal_error.AdalError:获取令牌请求返回http错误:401和服务器响应:{&#34;错误&#34;:&#34; invalid_client&#34;,&#34; error_description&#34;:& #34; AADSTS70002:请求正文必须包含以下参数:&#39; client_secret或client_assertion&#39; ..........&#34; correlation_id&#34; ......} < / p>
我们可以在Azure,本机或Web应用程序上注册两种应用程序。根据错误消息,您似乎注册了一个自信的应用程序,需要提供客户端密钥来获取访问令牌。
对于此问题,请注册原生应用而非网络应用。此外,应考虑使用资源所有者密码凭证流,因为这可能会泄漏凭据。请参阅以下链接中的流程:
答案 1 :(得分:0)
我遇到了同样的错误。 在azure活动目录的“应用程序注册”部分中,我将应用程序注册为网络主机/ api 。 当我将其更改为本地应用时,一切开始正常运行。