0

私はAzure ADでDynamics 365(委任された権限)へのアクセス権を持つように定義されたWebアプリケーションを持っています。Azure ADで認証して、クライアントクレデンシャルを使用してDynamics Web APIにアクセスすることは可能ですか?

そして私はClient Credentials Grantを使用して、azure ADからアクセストークンを取得しています。

var clientCredential = new ClientCredential(clientId, clientSecret); 
var result = authContext.AcquireTokenAsync(dynamicsTenant, clientCredential).Result; 

しかし、私はこのようなWeb APIにアクセスしようとすると、HTTP 401を得続ける:だから私はこれをやっている

var response = httpClient.GetAsync(dynamicsTenant + "/api/data/v8.1/contacts").Result; 

それはこのように、Resource Owner Password Credentials Grantで動作します:

var userCredential = new UserPasswordCredential("crmuser", "crmpwd"); 
var result = authContext.AcquireTokenAsync(dynamicsTenant, clientId, userCredential).Result; 

ダイナミック365にアクセスを禁止する可能性のある設定がありますか?

私の目的は、(ヘッドレス)機密クライアントからDynamics(Online)Web APIを使用することです。

答えて

1

AADがサポートする2種類のアクセス許可があります。これは2種類の主要な認証方法に一致します。

アプリケーションのアクセス許可と委任されたアクセス許可があります。hereを参照してください。

アプリケーションのアクセス許可:クライアントアプリケーションは、 Web APIに直接アクセスする必要があります(ユーザーコンテキストなし)。この種類のアクセス許可 には管理者の同意が必要で、ネイティブの クライアントアプリケーションでは利用できません。

委任された権限:お客様のクライアントアプリケーション は、ログインしたユーザーとしてWeb APIにアクセスする必要がありますが、アクセス許可は であり、選択したアクセス許可によって制限されています。このタイプのアクセス許可は、許可が の管理者同意を必要とするように構成されていない限り、ユーザーによって付与された にすることができます。

委任されたアクセス許可を使用するには、Authorization Code Grant Flowを使用できます。

クライアントクレデンシャルフローを使用してアクセストークンを取得する場合は、アプリケーションのアクセス許可を要求する必要があります。さもなければ、あなたは無許可になります。

これが役立つ場合はお知らせください。

+0

私はちょっと期待していたが、聞きたくなかった答えです。 –

+0

なぜそれを言うのですか?委任対アプリケーションのパーミッションは非常に重要なセグメンテーションです。クライアントアプリケーションがAPIに対して持つ権限は、トークンのコンテキストによって大きく異なります。電子メール管理アプリケーションを作成している場合、サインインしているときにアプリがメールを削除できますが、アプリが自分のユーザートークンを持たず、アプリ専用モードで動作していないときは、 –

+0

私は合理的な期待であることに同意します。私の場合、私はユーザーのトークンを持っていないので、私は自分のアプリのためにダイナミックなログインを持たなければならないかもしれないということを意味します。 –

関連する問題