Конечная точка токена идентификатора ядра .net не работает с вызовом API с веб-сайта, но не с почтальоном - PullRequest
0 голосов
/ 14 марта 2019

Я настраиваю сервер oauth2 с ядром .net, и он работает, пока я использую почтальон.Но когда я пытаюсь сделать вызов API из веб-приложения (в данном случае angularJS), я получаю сообщение об ошибке «Неверное имя объекта« Клиенты »

Вот мой файл Startup.cs

using System.Linq; using System.Reflection; using System.Security.Claims; using System.Threading.Tasks; using AuthCore.Models; using IdentityServer4.EntityFramework.DbContexts; using IdentityServer4.EntityFramework.Mappers; using IdentityServer4.EntityFramework; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.AspNetCore.Mvc; using AuthCore.Repositories; using AuthCore.Services; using Microsoft.AspNetCore.Authentication.JwtBearer;

namespace AuthCore {
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            const string connectionString = @"redacted";
            var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name;

            services.AddCors(options =>
                    {
                        options.AddPolicy("mysite",
                        builder =>
                        {
                            builder.AllowAnyHeader();
                            builder.AllowAnyOrigin();
                            builder.AllowAnyMethod();
                            builder.AllowCredentials();
                        });
                    });


            services.AddScoped<AuthRepository>();            
            services.AddScoped<UserRepository>();
            services.AddScoped<EmailCodeRepository>();
            services.AddScoped<EmailRepository>();
            services.AddScoped<TokenRepository>();
            services.AddScoped<PasswordResetRepository>();

            services.AddScoped<EmailCodeService>();
            services.AddScoped<EmailService>();
            services.AddScoped<UserService>();
            services.AddScoped<TokenService>();

            services.AddDbContext<ApplicationDbContext>(builder =>
                builder.UseSqlServer(connectionString, sqlOptions => sqlOptions.MigrationsAssembly(migrationsAssembly)));            

            services.AddIdentity<ApplicationUser, IdentityRole>(config =>
            {
                config.SignIn.RequireConfirmedEmail = true;
            }).AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();



            services.AddIdentityServer()
                .AddOperationalStore(options =>
                    options.ConfigureDbContext = builder =>
                        builder.UseSqlServer(connectionString, sqlOptions => sqlOptions.MigrationsAssembly(migrationsAssembly)))
                .AddConfigurationStore(options =>
                    options.ConfigureDbContext = builder =>
                        builder.UseSqlServer(connectionString, sqlOptions => sqlOptions.MigrationsAssembly(migrationsAssembly)))
                .AddAspNetIdentity<ApplicationUser>()                                
                .AddInMemoryApiResources(Config.GetApis())
                .AddInMemoryClients(Config.GetClients())                                
                .AddDeveloperSigningCredential();           

            services.AddMvcCore()
                .AddAuthorization()
                .AddJsonFormatters();

            services.AddAuthentication("Bearer")       
                .AddJwtBearer("Bearer", options =>
                {

                    options.Authority = "https://localhost:5001/";
                    options.RequireHttpsMetadata = false;

                    options.Audience = "api1";                    
                });



        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                // app.UseDeveloperExceptionPage();
            }

            // InitializeDbTestData(app);


            app.UseCors("mysite");

            app.UseAuthentication();
            app.UseIdentityServer();
            app.UseMvc();
        }
    } }

AngularJS Сервисный звонок

логин (loginData) {

this.deleteLoginInfo();

var data = {
    client_id: 'client',
    client_secret: 'secret',
    grant_type: 'password',
    scope: 'api1',
    password: loginData.password,
    username: loginData.userName
};        

var deferred = this.$q.defer();

let loginEndpoint = ENV.authDomain;

let headers = {
    headers:
        {
            'Content-Type': 'application/x-www-form-urlencoded'
        }
}

this.$http.post(loginEndpoint + '/connect/token', this.$httpParamSerializer(data), headers).then((response) => {

    this.localStorageService.set('authorizationData', { token: response.data.access_token });

    this._authentication.isAuth = true;
    this._authentication.userName = loginData.userName;

    deferred.resolve(response.data);

}).catch((err, status) => {

    deferred.reject(err);
});

return deferred.promise;

};

Я также пытался

var data = `grant_type=password&username=${data.username}&password=${data.password}&client_id=${data.client_id}&client_secret=secret&scope=api1`;

Не учитывая ни одну из работи почтальон, я склонен полагать, что что-то не так с серверной стороной. Это похоже на проблему типа cors, но у меня включены cors для всех, и ошибка не является cors. Я попытался найтиошибка, описанная выше, но ничего не имеет отношения к моей проблеме.

...