Я настраиваю сервер 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. Я попытался найтиошибка, описанная выше, но ничего не имеет отношения к моей проблеме.