0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Microsoft Graph APIで特定のAppRoleが取得できない

Posted at

はじめに

Microsoft Graph APIでアプリロールを取得していたのですが、特定のアプリロールが取得できず困ったので、解決策を簡単にまとめておきます。
使用言語はJavaScriptです。(ほかの言語でも同様かと思います)

また本記事ではアプリロールの説明や登録方法などは記載しません。

問題

ログイン中のユーザーのアプリロールの一覧を取得したかったので以下のように実装。
使用していたAPIは以下で、fetchAPIを使用して取得。

const response = await fetch("https://graph.microsoft.com/v1.0/me/appRoleAssignments");

アプリロールは返ってきているのですが、特定のアプリロールが入っていません。
原因が分からなかったのでSDKをインストールして試してみます。

Microsoft Graph SDKの導入

Microsoft Graph SDKを使用して確認してみます。

const client = Client.init({
  authProvider: (done) => done(null, <access_token>)
});

let appRoleAssignments = await client.api('/me/appRoleAssignments')
	.header('ConsistencyLevel','eventual')
	.get();

ですが、結果は変わらず。
問題のあったユーザーはどれもアプリロールの数が多かったので、試しにフィルターをかけてみることに。

フィルターをかける

リソースIDでフィルターをかけられるようなので、そちらを試してみます。

const client = Client.init({
  authProvider: (done) => done(null, <access_token>)
});

let appRoleAssignments = await client.api('/me/appRoleAssignments')
	.header('ConsistencyLevel','eventual')
    .filter('resourceId eq <resourcedId>')
	.get();

アプリケーションにアプリロールを定義している場合は、アプリのオブジェクトIDがresourcedIdになります。

フィルターをかけて試してみたところ、取得したかったアプリロールが取得できました。なぜ?

結論

フィルターをかけることで取得できるようになりました。
詳しい原因はわかりませんが、問題が発生していたユーザーはアプリロールの数が多かった(フィルター前のレスポンスを数えてみたら96個もありました)ので、数が多かったのが問題だったのかなと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?