У меня есть приложение angular7 с ядром asp.net 2.2 и Identity server 4 для аутентификации и авторизации. Я пытаюсь сделать гибридный или неявный тип предоставления для аутентификации нашего углового приложения. Ядро Asp.net загружает наше приложение angular7, используя приведенный ниже код в файле startup.cs
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseAngularCliServer(npmScript: "start");
}
});
Я хочу, чтобы пользователь прошел перенаправление на сервер идентификации для аутентификации, и после аутентификации наше угловое приложение должно открыться. Для этого я добавил ниже код в startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
options.SignInScheme = "Cookies";
options.Authority = "https://localhost:9001";
options.RequireHttpsMetadata = false;
options.ClientId = "AngularWebApp";
options.ClientSecret = "the_secret";
options.ResponseType = "code id_token";
options.GetClaimsFromUserInfoEndpoint = true;
options.SaveTokens = true;
options.Scope.Add("openApiScope");
options.Scope.Add("offline_access");
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseAuthentication();
}
Но этот код не перенаправляется автоматически, так как у меня нет контроллера и метода действия, определенных в ядре asp.net, которое использует [Authorize]
Итак, что я пытался перенаправить автоматически, я написал код в классе AppModule Angular, чтобы проверить состояние входа пользователя в систему, если он не вошел в систему, а затем перенаправить пользователя на идентификационный сервер, используя приведенный ниже код, используя oidc.client.js.
@NgModule({
declarations: [
AppComponent,
],
imports: [
BrowserModule,
HttpClientModule,
],
providers: [
],
bootstrap: [AppComponent]
})
export class AppModule {
constructor(private _authService: AppAuthNService) {
from(this._authService._userManager.getUser().then((user) => {
if (user==null) {
this._authService.login();
}
}));
}
}
Сейчас происходит перенаправление на сервер авторизации, но я не уверен, что это хороший подход.
Может ли кто-нибудь предложить нам