Ошибка AADTS50049: «Неизвестный или недопустимый экземпляр» в ASP.NET Core 8 MVC с Azure AD B2C.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка AADTS50049: «Неизвестный или недопустимый экземпляр» в ASP.NET Core 8 MVC с Azure AD B2C.

Сообщение Anonymous »

Я работаю над приложением ASP.NET Core 8 MVC и использую Azure AD B2C для управления аутентификацией. Ниже приведена моя конфигурация appsettings.json:

Код: Выделить всё

"AzureAdB2C": {
"Instance": "https://test555.b2clogin.com",
"ClientId": "test555",
"Domain": "test555.onmicrosoft.com",
"SignedOutCallbackPath": "/signout/B2C_1_SignUpSignIn",
"SignUpSignInPolicyId": "B2C_1_SignUpSignIn"
}
Вот как я настроил свой Startup.cs:

Код: Выделить всё

public void ConfigureServices(IServiceCollection services)
{
services.AddMicrosoftIdentityWebAppAuthentication(Configuration, "AzureAdB2C")
.EnableTokenAcquisitionToCallDownstreamApi(new string[] { Configuration["ProsperityPilot:ProsperityPilotScope"] })
.AddInMemoryTokenCaches();

services.AddTransient();

services.AddControllersWithViews(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
}).AddMicrosoftIdentityUI();

services.AddOptions();
services.Configure(Configuration.GetSection("AzureAdB2C"));
}
До этого момента все работает нормально. Я могу войти в систему, зарегистрироваться/выйти из системы с помощью Azure AD B2C и выполнить вызовы API для получения токена следующим образом:

Код: Выделить всё

private async Task PrepareAuthenticatedClient()
{
var accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(new[] { _todoListScope });
Debug.WriteLine($"access token-{accessToken}");
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
Однако я хотел использовать IClaimsTransformation для добавления некоторых утверждений при входе пользователя в систему. Я написал следующий метод для получения токена, но получаю ошибку:

AADSTS50049: Неизвестный или недопустимый экземпляр.

Код: Выделить всё

 public async Task TransformAsync(ClaimsPrincipal principal)
{

///...

var token = await GetApplicationTokenAsync();

// search Users by email
var userEmail = principal.Identity.Name;
var user = await _service.GetByEmailAsync(userEmail, token);

///...

return clone;
}
Вот мой GetApplicationTokenAsync:

Код: Выделить всё

private async Task GetApplicationTokenAsync()
{
var clientId = _configuration["AzureAdB2C:ClientId"];
var clientSecret = _configuration["AzureAdB2C:ClientSecret"];
var scope = _configuration["MyApp:MyAppScope"];
var tenant = _configuration["AzureAdB2C:Domain"];
var policy = _configuration["AzureAdB2C:SignUpSignInPolicyId"];

var authority = $"https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/v2.0";

IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(clientId)
.WithClientSecret(clientSecret)
.WithAuthority(new Uri(authority))
.Build();

var authResult = await app.AcquireTokenForClient(new[] { scope }).ExecuteAsync();
return authResult.AccessToken;
}
Вопросы:
  • Как правильно настроить полномочия для получения токена в ASP.NET Core? 8 MVC-приложение, использующее Azure AD B2C?
  • Нужно ли мне настраивать отдельный DownstreamApi? Если да, то как мне его правильно настроить?
РЕПО:
Я создал этот репозиторий, чтобы обеспечить четкое представление и анализ проблемы, с которой я сталкиваюсь, и более глубокое понимание ошибки.


Подробнее здесь: https://stackoverflow.com/questions/786 ... -with-azur
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»