Использовать токены OAuth в ASP.Net Веб — Api 2.0

#c# #asp.net-web-api #jwt #owin

#c# #asp.net-web-api #jwt #owin

Вопрос:

Я создал совершенно новый веб-сервис, используя ASP.Net Web Api 2.0 и я пытаюсь использовать авторизацию на основе токена OAuth JWT. У меня вся базовая проводка выполнена с помощью OWIN, но когда я использую атрибут [Authorize], он завершается с ошибкой даже для действительного токена. Можете ли вы помочь.

Редактировать: я сузил проблему. Похоже, что ключом является RS256, и SymmetricKeyIssuerSecurityKeyProvider этого не обрабатывает… Либо это, либо я передаю поставщику ключей неверную информацию. Есть идеи, как это исправить?

Вот код моего startup.cs

 using System.Configuration;
using System.Web.Http;
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.Jwt;
using Owin;
using Microsoft.AspNet.Identity;

namespace SecuredApi
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            ConfigureOAuth(app);
            var config = ConfigureWebApi();

            app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
            app.UseWebApi(config);
        }

        private HttpConfiguration ConfigureWebApi()
        {
            var config = new HttpConfiguration();
            config.SuppressDefaultHostAuthentication();
            config.Filters.Add(new HostAuthenticationFilter("Bearer"));
            config.MapHttpAttributeRoutes();
            return config;
        }

        private void ConfigureOAuth(IAppBuilder app)
        {
            var issuer = ConfigurationManager.AppSettings.Get("Issuer");
            var audience = ConfigurationManager.AppSettings.Get("Audience");
            var secret = ConfigurationManager.AppSettings.Get("Secret");

            // Api controllers with an [Authorize] attribute will be validated with JWT
            var jwtBearerAuthenticationOptions = new JwtBearerAuthenticationOptions
            {
                AuthenticationMode = AuthenticationMode.Active,
                AuthenticationType = DefaultAuthenticationTypes.ExternalBearer,
                AllowedAudiences = new[] { audience },
                IssuerSecurityKeyProviders = new IIssuerSecurityKeyProvider[]
                {
                    new SymmetricKeyIssuerSecurityKeyProvider(issuer, secret)
                }
            };
            app.UseJwtBearerAuthentication(
                jwtBearerAuthenticationOptions);

        }
    }
}
  

Комментарии:

1. Что вы имеете в виду it fails ?

2. @ChetanRanpariya Если я добавляю атрибут авторизации, он завершается как «несанкционированный» … если я этого не сделаю, пользователь в контексте не имеет претензий…