CRMをWebショップなどの他のアプリケーションと統合するためのサーバー間インターフェースを構築するための新しいREST APIにアクセスしようとしています.
Azure AD からアクセス トークンを取得する両方の方法を試しました。
クライアント資格情報
import adal
token_response = adal.acquire_token_with_client_credentials(
'https://login.microsoftonline.com/abcdefgh-1234-5678-a1b1-morerandomstuff',
client_id,
secret
)
およびユーザー/パスワード
import adal
token_response = adal.acquire_token_with_username_password(
'https://login.microsoftonline.com/abcdefgh-1234-5678-a1b1-morerandomstuff',
'interface@crm.my_domain.com',
'my_password'
)
どちらの場合も、token_response は、accessToken、refreshToken、expiresIn などを含むトークン オブジェクトを取得します。なので、今のところ間違いは無いと思います。
次に、Web API に対して簡単なリクエストを作成してみます。
headers = {'Authorization': '%s %s' % (token_response.get('tokenType'),
token_response.get('accessToken'))}
r = requests.get('https://domain.api.crm4.dynamics.com/api/data/v8.0/Product',
headers=headers)
これは常に HTTP 401 - Unauthorized: Access is denied を返します。
('WWW-Authenticate', 'Bearer error=invalid_token,
error_description=Error during token validation!,
authorization_uri=https://login.windows.net/eabcdefgh-1234-5678-a1b1-morerandomstuff/oauth2/authorize,
resource_id=https://domain.api.crm4.dynamics.com/')
要求を行おうとするユーザーには Office-365-Administrator 権限があり、CRM ではすべてのマネージャーの役割と管理者の役割を持っています。私の好みでは少し多めですが、どこかで読んだところ、ユーザーは office-365 の管理者権限を持っている必要があります。Azure AD には、CRM への "委任された権限" ("組織ユーザーとしての CRM Online へのアクセス") を持つアプリケーションが構成されています。
ここで何が欠けていますか?または、REST-get-request が間違っていますか? 新しい API に関する Microsoft ドキュメントは事実上存在しません。リンクをクリックすると、古い API (組織 API など) のドキュメントが表示されます。