Вторая аутентификация JWT с политикой, не доходящей до метода контроллераC#

Место общения программистов C#
Ответить
Anonymous
 Вторая аутентификация JWT с политикой, не доходящей до метода контроллера

Сообщение Anonymous »

Я пытаюсь добавить вторую аутентификацию JWT. Вроде всё работает, пока не пытается обратиться к методу в контроллере.
Сначала определяю имя схемы:

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

const string bearerJwtWrite = "JwtWrite";
и добавьте носитель JWT

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

builder.Services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
{ ... }
.AddJwtBearer(bearerJwtWrite, options =>
{
options.Authority = builder.Configuration["Jwt:Write:Issuer"];
options.Audience = builder.Configuration["Jwt:Write:Audience"];
// options.Challenge = bearerJwtWrite;
options.TokenValidationParameters = new TokenValidationParameters
он ​​также попадает в проверенную часть токена при выполнении веб-запроса

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

    OnTokenValidated = context =>
{
// Add custom claims to the principal if the token is valid
var claims = new[]
{
new Claim(
ClaimTypes.NameIdentifier,
context.Scheme.Name,
ClaimValueTypes.String, context.Options.ClaimsIssuer),
new Claim(ClaimTypes.Role, "Claim_AdminPrivilege_API_jwt_Write")
};

context.Principal = new ClaimsPrincipal(
new ClaimsIdentity(claims, context.Scheme.Name));

return Task.CompletedTask;
},
после этого он попадает в конструктор API-контроллера и всё. Дальше не идет, только когда я убираю Authorize с контроллера.
Политика определяется так:

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

builder.Services.AddAuthorization(options =>
{

options.AddPolicy("Role_AdminPrivilege_API_jwt_Write", p => {
// Add the authentication scheme for certificate
p.AuthenticationSchemes.Add(bearerJwtWrite);
//p.RequireAssertion(context => true);
p.RequireClaim(ClaimTypes.Role, "Claim_AdminPrivilege_API_jwt_Write");
});

});
И мой метод:

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

[Authorize(AuthenticationSchemes = "JwtWrite")]
[Authorize(Policy = "Role_AdminPrivilege_API_jwt_Write")]
[HttpPost("CreateEndpointAdminJwt")]
public async Task CreateEndpointAdminJwt([FromBody]MyModel model)
Другая функция, использующая JwtBearerDefaults.AuthenticationScheme, работает нормально.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ler-method
Ответить

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

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

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

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

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