Как настроить Azure AD и Azure AD B2C вместе в качестве поставщиков аутентификации JWT в ASP.NET Core?C#

Место общения программистов C#
Ответить
Anonymous
 Как настроить Azure AD и Azure AD B2C вместе в качестве поставщиков аутентификации JWT в ASP.NET Core?

Сообщение Anonymous »

Я пытаюсь настроить двойную аутентификацию JWT в своем веб-API ASP.NET Core.
Мой API должен принимать токены от:
  • Azure AD B2C
  • Azure AD (Entra ID)
Я использую PolicyScheme (

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

DualAuth
), чтобы автоматически определить, какой токен используется, на основе эмитента JWT.

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

services
.AddAuthentication("DualAuth")
// 1. Azure AD B2C
.AddJwtBearer("AzureAdB2cAuth", options =>
{
options.Audience = configuration["AzureAdB2c:Audience"];
options.Authority = configuration["AzureAdB2c:Authority"];

options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateIssuerSigningKey = false,
ValidateLifetime = true,
ValidIssuer = configuration["AzureAdB2c:Issuer"],
ValidAudience = configuration["AzureAdB2c:Audience"],
};
})

// 2. Azure AD (Entra ID)
.AddJwtBearer("AzureAdAuth", options =>
{
options.Audience = configuration["AzureAd:Audience"];
options.Authority = configuration["AzureAd:Authority"];

options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateIssuerSigningKey = true,
ValidateLifetime = true,
ValidIssuer = configuration["AzureAd:Issuer"],
ValidAudience = configuration["AzureAd:Audience"],
};
})

// 3. Policy Scheme to route token to correct handler
.AddPolicyScheme("DualAuth", "DualAuth", options =>
{
options.ForwardDefaultSelector = context =>
{
string authorization = context.Request.Headers[HeaderNames.Authorization];

if (!string.IsNullOrEmpty(authorization) && authorization.StartsWith("Bearer "))
{
var token = authorization.Substring("Bearer ".Length).Trim();
var handler = new JwtSecurityTokenHandler();

if (handler.CanReadToken(token))
{
var jwt = handler.ReadJwtToken(token);
var issuer = jwt.Issuer;

if (issuer.Equals(configuration["AzureAdB2c:Issuer"], StringComparison.OrdinalIgnoreCase))
return "AzureAdB2cAuth";
}
}

return "AzureAdAuth"; // fallback
};
});

services.AddAuthorization(options =>
{
var commonPolicy = new AuthorizationPolicyBuilder("AzureAdB2cAuth", "AzureAdAuth")
.RequireAuthenticatedUser()
.Build();

options.AddPolicy("DualAuth", commonPolicy);
});

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

"AzureAdB2c": {
"Issuer": "https://{mydomain.com}/tenantId/v2.0/",
"Audience": "client-id",
"Authority": "https://{mydomain.com}/4a653a75-4f63-47d8-8705-fdb979d9e578/v2.0/"
},

"AzureAd": {
"Issuer": "https://sts.windows.net/tenantid/",
"Audience": "api://client-id",
"Authority": "https://login.microsoftonline.com/tenantid"
}
Аутентификация Azure AD (Entra ID) работает правильно, но токены Azure AD B2C постоянно отклоняются. Мы будем очень признательны за любые дополнительные сведения, исправления или рабочий пример кода.


Подробнее здесь: https://stackoverflow.com/questions/798 ... ion-provid
Ответить

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

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

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

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

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