Как выдать и проверить JWT из одной конечной точки службы? - PullRequest
0 голосов
/ 28 сентября 2018

Я успешно подключил систему авторизации на основе токенов между интерфейсным веб-приложением Angular и внутренним интерфейсом .Net Core Web API (для получения данных).

Теперь я хочу объединить JWTЛогика (создание и проверка) в третьем веб-API .Net Core Project.

Как «переместить» следующую логику в отдельный веб-API для проверки токена?

ВStartup.cs:

  public void ConfigureServices(IServiceCollection services)
    {            
        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,

                ValidateIssuer = true,
                ValidateAudience = true,

                ValidAudiences = new List<string> { "Audience1", "Audience2" },
                ValidIssuer = "Credit Card oAuth Web API",
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("superSecretKey@345"))

            };
        });                        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    }

И в контроллере:

        [Authorize (Roles = "Credit Card Administrator")]
    public ActionResult<string> Get(int id)
    {
        return "value";
    }

Я хочу сохранить логику для ролей (которая работает из-заутверждает, что в JWT это делается так:

var userClaims = new List<Claim>()
            {
                new Claim(JwtRegisteredClaimNames.Sub, name),
                new Claim(JwtRegisteredClaimNames.Email, "user.name@company.com"),
                new Claim(JwtRegisteredClaimNames.GivenName, "User Name"),
                new Claim(ClaimTypes.Role, "Customer Administrator"),
                new Claim(ClaimTypes.Role, "Credit Card Administrator"),
                new Claim(ClaimTypes.Role, "Counter Administrator")
            };

            // TODO: Refactor The Following: Get token from oAuth Service (pass in Audience and Claims)
            var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("superSecretKey@345"));
            var signinCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256);

            var tokenOptions = new JwtSecurityToken(
                issuer: "http://localhost:58726",
                audience: "http://localhost:58726",
                claims: userClaims,
                expires: DateTime.Now.AddMinutes(20),
                signingCredentials: signinCredentials
            );

            var tokenString = new JwtSecurityTokenHandler().WriteToken(tokenOptions);

Я надеюсь, что это имеет смысл, и любая помощь приветствуется.

1 Ответ

0 голосов
/ 28 сентября 2018

Как «переместить» следующую логику в отдельный веб-API для проверки токена?

Логика, которую вы хотите переместить, является частью промежуточного программного обеспечения проверки подлинности ASP.NET Core.который, среди прочего, имеет эти обязанности.

  1. считывает токен доступа (токен носителя) из заголовка Authorize HTTP-запроса,
  2. проверяет этот токен доступа,
  3. отображает требования токена доступа кAuthorize атрибут.

Маркер доступа в этом случае кодируется как JWT.

Звучит так, как будто вы хотите выполнить шаг (2) на отдельном сервере.Если это так, вы, вероятно, ищете OAuth Introspection.

Для этого есть несколько расширений на GitHub.Кроме того, ошибка AspNet.Security.OAuth.Extensions во время самоанализа с вопросом и ответом поможет вам настроить эти расширения для OAuth Introspection.

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