ASP NET CORE Идентификационные и Checktoken URL - PullRequest
0 голосов
/ 11 октября 2019

Что ж, я пытаюсь использовать ASP NET CORE 2.1 с OAuth2 для аутентификации в IdP (Identity Provider), поэтому у меня есть следующее:

 services.AddAuthentication()
                .AddJwtBearer(options =>
                {
                    // The API resource scope issued in authorization server
                    options.Audience = "resource.server.api";
                    // URL of my authorization server
                    options.Authority = "https://myidp.com.br";
                });

            // Making JWT authentication scheme the default
            services.AddAuthorization(options =>
            {
                options.DefaultPolicy = new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme)
                    .RequireAuthenticatedUser()
                    .Build();
            });

Когда я пытаюсь вызвать мой API,ПОСТМАН, я получил следующее:

System.InvalidOperationException: IDX20803: Unable to obtain configuration from: 'https://myidp.com.br/.well-known/openid-configuration'.

Ну, у меня нет известного URL в моем IdP, и я не могу добавить его в данный момент проекта. Есть ли другой способ настроить URL-адреса вручную без известных?

Еще одна важная вещь: у нас есть URL https://myidp.com.br/oauth/tokeninfo, который проверяет, действителен JWT TOKEN или нет.

1 Ответ

1 голос
/ 14 октября 2019

Я предполагаю, что вы используете Asymmetric Keys. Обычно информация открытого ключа автоматически извлекается из документа обнаружения. Если вам нужно указать его вручную, вам нужно получить ключевые параметры и создать объект SecurityKey. Вы можете обратиться к ссылкам belwo для примеров кода:

https://github.com/IdentityServer/IdentityServer4/blob/master/samples/Clients/src/MvcManual/Controllers/HomeController.cs#L148

Проверка JWT, подписанного с помощью алгоритма RS256, с использованием открытого ключа в C #

Youтакже можно записать пользовательский JwtSecurityTokenHandler в System.IdentityModel.Tokens.Jwt package и переопределить событие ValidateToken для реализации пользовательской логики проверки.

Вы также можете не использовать промежуточное ПО AddJwtBearer, пример кода такой жекак выше , создайте свои ключи и применитесь к проверке.

Обычно процесс проверки токена noraml:

  • Декодирование токена
  • Проверка заявок (эмитент, аудитория, время истечения ...)
  • Проверить подпись
  • Создание пользователя и войти в систему пользователя

Обновлено:

Вы также можете добавить свою собственную проверку подписи вПараметры TokenValidation:

services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;

}).AddJwtBearer(options =>
{
    options.RequireHttpsMetadata = false;
    options.SaveToken = true;
    options.TokenValidationParameters = new TokenValidationParameters
    {

        ValidateIssuer = false,
        ValidateAudience = false,
        SignatureValidator =
        delegate (string token, TokenValidationParameters parameters)
        {

            var jwt = new JwtSecurityToken(token);

            var httpClient = new HttpClient();

            var requestData = new HttpRequestMessage
            {
                Method = HttpMethod.Get,
                RequestUri = new Uri("xxxxxx"),
            };

            //pass toekn to your endpoint and check result 

            if (false)
            {
                throw new Exception("Token signature validation failed.");
            }

            return jwt;
        }
    };

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...