0

Azure Active Directory があり、Web Api には、Azure に登録したアプリケーションとクライアント証明書を使用して、Azure Graph Api からトークンを取得できるコードがあります。ここに私が今使っているコードがあります:

public static string AcquireServiceToken()
{
    var authority = string.Format(_authority, "common");
    var authContext = new AuthenticationContext(authority);

    var result = authContext.AcquireToken(_serviceTokenResourceId, new ClientAssertionCertificate(_serviceTokenClientId, GetClientCertificate(_certThumbprint)));
    return result.AccessToken;
}

このコード スニペットは問題なく動作します。必要なのは、ログインしているユーザーのコンテキストを持つより具体的なトークンです。基本的には、ユーザー名とパスワードを渡して、Azure から Graph トークンを取得できるようにする必要があります。何か案は?

4

2 に答える 2

2

Web API は、onbehalfof フローを介して新しいトークンを取得することにより、現在のユーザーとして別の Web API (この場合はグラフ) にアクセスできます。例については、 https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfofを参照してください。ユーザー名とパスワードを直接使用することはお勧めしません。Azure AD の独自のページ以外で資格情報を収集することはできません。この特定のケースでは、機能しません (またはすぐに機能しなくなります)。

于 2015-09-28T17:55:28.763 に答える
1

AcquireToken には UserCredential オブジェクトを受け取る別のオーバーロードがあり、それを使用できると仮定します (トークンを取得する必要があるユーザーの Active Directory の TenantId が必要になります)。

関数は次のようになります: (_variables に独自のアプリケーション情報を入力してください)

public static string AcquireTokenWithoutUserCredentials(string userName, string password)
{
    var authContext = new AuthenticationContext(string.Format(_authority, _userTokenTenantId));
    var userCreds = new UserCredential(userName, password);
    var result = authContext.AcquireToken(_resourceId, _userTokenClientId, userCreds);
    return result.AccessToken;
}

あなたのコードを見ると、TenatName として "common" を使用するマルチ テナント シナリオがあるように見えます。

于 2015-09-28T17:23:19.227 に答える