2017-01-11 3 views
0

私はAzure Active Directoryに1年以上前にアプリケーションを定義していましたが、その前にすべてが動作するまで必要なアクセス権で遊んでいました。アプリケーションのディレクトリアクセス権が取り消されましたが、グラフAPIはまだデータを読み込みます

前回から数分前まで、「Windows Azure Active Directory」には「ディレクトリデータの読み取り」と「サインインしてユーザープロファイルを読む」の2つの権限がありました。

しかし、私は彼らを取り消さして「保存」をクリックした:

私はそのアプリのクライアントIDと再びグラフAPIにログインする前に、AADに同期化のための数分を与え、 Keyと対応するTenantIDが表示されますが、ディレクトリデータを読み取ることができることがわかりました。


元々、私は別のアプリで反対の問題をデバッグしていました。他のアプリケーションは、同じアクセス許可(「ディレクトリデータの読み取り」と「ユーザーのプロファイルの読み取りと読み取り」)を使用してこのアプリケーションと同じように設定されますが、常にエラーがスローされます。

System.Data.Services。 Client.DataServiceClientException:{"odata.error":{"code": "Authorization_RequestDenied"、 "message":{"lang": "en"、 "value": "操作を完了するための権限がありません"}}}

ログイン情報のいずれかが間違っている場合、返されるエラーは異なります(400 Bad Requestまたは401 Not Authorized)ので、ログインは機能しますが、アプリケーションにはディレクトリへのアクセスに必要な権限がないようですデータ。

While browsing the web I found that the app needs more permissions to be able to read directory data.

私は私の最初のアプリは一度これらの他の権限が設定されていたし、再び「失効した」ことを排除することはできませんので、私は考えられないことを考えなければならない:

それは、アプリへのアクセス権のだろういったん認められれば、本当に再び取り消されることはありませんか?


更新:いいえ、それほど簡単ではありません。彼らは取り消されないだけでなく、新しいアプリのために設定されていません。私は新しいアプリ上のすべての権限を確認した場合でも、「権限が不十分」のエラーがまだそこにある:

答えて

-1

権限は限りJWT認証トークンが有効であるとしてとどまります。権限はトークン発行者(login.microsoftonline.com)によってJWTトークンにエンコードされます。 ライフタイムは(AFAIR)1時間です。

もう一度ログインして新しいトークンを取得すると、古い権限が取得されないはずです。 jwt.ioまたはjwt.calebb.netのようなサイトでJWTトークンをデコードできます。

0

アプリケーションのアクセス許可を変更するときに、ログインしたユーザーに再度同意させるようにして、そのユーザーに対して新しいアクセス許可が書き込まれるようにする必要があります。

私はディレクトリ内のロジックが既に許可されているアクセス許可を持っている場合、トークンサービスは既に承諾されたアクセス許可に基づいてトークンを付与すると考えています。ユーザーが最後に承諾した後に新しい権限が変更された場合、その権限はユーザーが決して同意しなかったため適用されません。

あなたができることは、ログインURLに「プロンプト=同意」の文字列を追加することで強制的に再同意することです。ここで、アプリケーションが必要とするすべての新しい権限を表示する必要があります。不十分な特権の問題。

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

+0

アプリケーションにログインしているユーザーはいません。私のWindowsサービスは、アプリケーションのClientIDとTenantIDとKeyを使用してGraph APIに接続しており、さらに認証せずにGraph APIからデータを読み取ることができるはずです。 – Alexander

+0

ユーザーが存在しないアプリケーションであっても、最初に同意する必要があります。つまり、権限をまだ更新するには、ユーザーがアプリケーションにサインインする必要があります。 –

関連する問題