Согласно ссылке на ConfidentialClientApplication.GetAuthorizationRequestUrl метод
Computes the URL of the authorization request letting the user sign-in and consent to the application accessing specific scopes in the user's name. The URL targets the /authorize endpoint of the authority configured in the application.
Итак, я должен иметь возможность получить URL-адрес запроса авторизации с помощью кода, подобного следующему:
string[] graphScopes = { "Files.Read.All", "User.Read" };
ConfidentialClientApplicationBuilder clientBuilder = ConfidentialClientApplicationBuilder.Create(Settings.AzureADClientId);
ConfidentialClientApplication clientApp = (ConfidentialClientApplication)clientBuilder.Build();
var urlBuilder = clientApp.GetAuthorizationRequestUrl(graphScopes);
urlBuilder.WithRedirectUri(loginRedirectUri.ToString());
urlBuilder.WithAuthority(Settings.AzureADAuthority);
var authUrl = await urlBuilder.ExecuteAsync();
authUrl. ????
Но метод GetAuthorizationRequestUrlParameterBuilder.ExecuteAsync()
возвращает AuthorizationResult
, который не является URL-адресом и не имеет свойства с URL-адресом.
Может кто-нибудь объяснить, что я делаю неправильно, или объяснить, как на самом деле получить URL-адрес запроса авторизации?
Очевидно, метод ExecuteAsync()
, который возвращает Uri
, не является методом без параметров:
public Task<Uri> ExecuteAsync(CancellationToken cancellationToken)
Итак, возможно, вы хотите сделать следующее:
var authUrl = await urlBuilder.ExecuteAsync(System.Threading.CancellationToken.None);
Исправлена ошибка в MSAL v4: https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/msal-net-4.
Хотя @TiagoBrenck прав, это ошибка, и я зарегистрировал https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/issues/1193
С точки зрения стиля кодирования я бы написал код примерно так:
string[] graphScopes = { "Files.Read.All", "User.Read" };
IConfidentialClientApplication cca = ConfidentialClientApplicationBuilder.Create("<client_id>").Build();
Uri url = await cca.GetAuthorizationRequestUrl(graphScopes)
.WithRedirectUri("some_uri")
.WithAuthority(AzureCloudInstance.AzurePublic, AadAuthorityAudience.AzureAdAndPersonalMicrosoftAccount)
.ExecuteAsync(CancellationToken.None)
.ConfigureAwait(false);