Azure MSAL JS: Как отредактировать профиль?

Я успешно реализовал MSAL JS для Azure AD B2C. Следующий шаг - позволить пользователю отредактировать свой профиль. Я создал новую политику для редактирования профиля. Но как перенаправить пользователя там? Существуют только методы входа/получения меток токена. Я попытался установить полномочия для другой политики. Затем он перенаправляет на нужную страницу, но затем начинает жаловаться на ошибки в области видимости, и он помещает токен локально.

editProfile() {
  this.userAgentApp.authority = this.policyEditProfile;
  this.userAgentApp.loginRedirect();
}

В примерах кода ASP.NET явно есть возможность установить идентификатор политики editProfile: https://docs.microsoft.com/en-gb/azure/active-directory-b2c/active-directory-b2c-devquickstarts-web-dotnet-susi#update-code-to-use-your-tenant-and-policies

Похоже, что этого не хватает в MSAL.JS, и мне нужно вручную создать URL-адрес, это правильно?

Ответы

Ответ 1

Да, это правильно. Вам нужно будет использовать другой орган, URL которого состоит из арендатора и имени политики, как показано здесь:

private static string Tenant = "yourTenant.onmicrosoft.com";
public static string PolicySignUpSignIn = "b2c_1_susi";
public static string PolicyEditProfile = "b2c_1_edit_profile";
private static string BaseAuthority = "https://login.microsoftonline.com/tfp/{tenant}/{policy}/oauth2/v2.0/authorize";
public static string Authority = BaseAuthority.Replace("{tenant}", Tenant).Replace("{policy}", PolicySignUpSignIn);
public static string AuthorityEditProfile = BaseAuthority.Replace("{tenant}", Tenant).Replace("{policy}", PolicyEditProfile);

Кстати, этот образец, хотя для .NET Desktop показано, как использовать политики редактировать профиль и пароль reset: active-directory-b2c-dotnet-desktop, см., в частности, метод EditProfileButton_Click, фактор приобретения токен (интерактивно) вызовет диалог для редактирования профиля:

AuthenticationResult authResult = await App.PublicClientApp.AcquireTokenAsync(App.ApiScopes, GetUserByPolicy(App.PublicClientApp.Users, App.PolicyEditProfile), UIBehavior.SelectAccount, string.Empty, null, App.AuthorityEditProfile);