使用客户端凭证流重定向URI

时间:2019-02-21 20:12:26

标签: asp.net-core oauth-2.0 .net-core azure-active-directory msal

我正在研究使用MSAL和客户端凭证流,但是,有一件事我还不完全了解。

在Microsoft提供的示例中: https://github.com/Azure-Samples/active-directory-dotnetcore-daemon-v2/blob/master/daemon-console/Program.cs

以下代码用于获取访问令牌:

var clientCredentials = new ClientCredential(_clientSecret);
var app = new ConfidentialClientApplication(_clientId, _authority, "https://daemon", clientCredentials, null, new TokenCache());
string[] scopes = new string[] { "https://graph.microsoft.com/.default" };
AuthenticationResult result = await app.AcquireTokenForClientAsync(scopes);

在这种情况下redirectUri怎么了?

我尝试了与redirectUri不同的值,并且似乎可以通过任何一种方式工作...但是,如果我添加相对路径或为null,则它无法获取令牌。这个值应该是什么?

对于控制台应用程序,侦听URL几乎没有意义,但是,SecureClientClientApplication的文档说它是必需的。

1 个答案:

答案 0 :(得分:2)

要使用客户端凭据流请求访问令牌,应用程序将使用应用程序的凭据将HTTP POST令牌请求发送到Azure AD的令牌端点,AAD将返回访问令牌作为响应,在这种情况下不需要重定向URL。根据源代码,也不会使用重定向网址:

private async Task<AuthenticationResult> AcquireTokenForClientCommonAsync(IEnumerable<string> scopes, bool forceRefresh, ApiEvent.ApiIds apiId, bool sendCertificate)
{
    Authority authority = Instance.Authority.CreateAuthority(ServiceBundle, Authority, ValidateAuthority);
    AuthenticationRequestParameters parameters = CreateRequestParameters(authority, scopes, null,
        AppTokenCache);
    parameters.IsClientCredentialRequest = true;
    parameters.SendCertificate = sendCertificate;
    var handler = new ClientCredentialRequest(
        ServiceBundle,
        parameters,
        apiId,
        forceRefresh);

    return await handler.RunAsync(CancellationToken.None).ConfigureAwait(false);
}

但是此时您应该在初始化ConfidentialClientApplication时提供有效的网址。