私はAzure ADでユーザーのログインがあるWebサイトを持っており、そのユーザーが参加しているすべてのMicrosoftチームの一覧を取得しようとしています。私はGraphServiceClientを使用していますが、ベータ版が入っていないようですが、私は下の例を参照して作業していると思います。参加しているすべてのチームを一覧表示
まず、GraphServiceClientを作成するときに、このようにコンストラクタにベータエンドポイントを指定しています。
public GraphServiceClient GetAuthenticatedClient(string userId) {
_graphClient = new GraphServiceClient("https://graph.microsoft.com/beta", new DelegateAuthenticationProvider(
async(requestMessage) => {
// Passing tenant ID to the sample auth provider to use as a cache key
AccessToken = await _authProvider.GetUserAccessTokenAsync(userId);
// Append the access token to the request
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", AccessToken);
}));
return _graphClient;
}
はまた、私はこれを処理するためのより良い方法があれば質問理由である、後のことを必要とするので、私はAccessTokenを格納していていることがわかります。
次に、私が参加チームのリストを取得しようとしている方法で、私は次のことをしています。
public static async Task < IEnumerable <string>> GetGroups(GraphServiceClient graphClient) {
var request = graphClient.Me.Request().GetHttpRequestMessage();
request.RequestUri = new Uri(request.RequestUri.AbsoluteUri + "/joinedTeams");
//request.RequestUri = new Uri("https://graph.microsoft.com/beta/groups");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", GraphSDKHelper.AccessToken);
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
try {
var response = await graphClient.HttpProvider.SendAsync(request);
var stream = await response.Content.ReadAsStreamAsync();
} catch (Exception e) {}
//var gs = await graphClient.Me.MemberOf.Request().GetHttpRequestMessage();//.GetAsync();
var results = new List <string>();
var groups = await graphClient.Groups.Request().GetAsync();
do {
foreach(var group in groups) {
results.Add(group.DisplayName);
}
groups = await groups.NextPageRequest.GetAsync();
} while (groups.NextPageRequest != null);
return results;
}
これには2つの部分があることがわかります。最初の部分は私が参加チームコールを使用しようとしているが、それは私に次のエラーを与える。それから、私はすべてのグループを列挙しています。そのグループはうまくいきます。
portal.azure.comでMessage: Authorization has been denied for this request.
Inner error
私は、App登録を設定しているとuser.read.allアプリケーションの権限user.read.all委任権限の下でも
と(いないを与えています私はそれを与える必要があります)。、なぜこれが仕事と私が正しくやっていないよ、他のものがあるなら、私に知らせてくださいません。
もう少しテストした後に追加の注釈が1つ追加されます。問題は本当に私です。いつでも、私のもの、つまり私/ドライブなどと何かを呼び出すときはいつもそれはエラーです。私はユーザー[XXXXX] /ドライブに電話することができ、それは正常に動作しますが、私の下のものはすべて失敗します。
編集は
彼は下記のマークの回答に基づいてGraphServiceClient
を作成するコードは、me
にアクセスすることができないの私の問題の原因である可能性があります:
public GraphServiceClient GetAuthenticatedClient(string userId)
{
_graphClient = new GraphServiceClient("https://graph.microsoft.com/beta", new DelegateAuthenticationProvider(
async(requestMessage) =>
{
// Passing tenant ID to the sample auth provider to use as a cache key
AccessToken = await _authProvider.GetUserAccessTokenAsync(userId);
// Append the access token to the request
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", AccessToken);
}));
return _graphClient;
}
public async Task<string> GetUserAccessTokenAsync(string userId)
{
TokenCache userTokenCache = new SessionTokenCache(userId, _memoryCache).GetCacheInstance();
try
{
AuthenticationContext authContext = new AuthenticationContext(_aadInstance, userTokenCache);
ClientCredential credential = new ClientCredential(_appId, _appSecret);
AuthenticationResult result = await authContext.AcquireTokenAsync(_graphResourceId, credential);
return result.AccessToken;
}
catch (Exception ex)
{
return null;
}
}
ユーザーはAzure ADを使用してアプリケーションにログインしています。だから、委任された権限をピボットするために何をする必要がありますか。私はすでに両方のアプリケーション登録をチェックしました。 –
GraphServiceClientの作成に使用するコードをすべて表示するように私の質問を編集しました。 –