0

我有一个带有 asp.net core 2.2 的 angular7 应用程序和一个用于身份验证和授权的身份服务器 4。我正在尝试使用混合或隐式授权类型来验证我们的角度应用程序。Asp.net 核心正在使用 startup.cs 中的以下代码引导我们的 angular7 应用程序

app.UseSpa(spa =>
        {                
            spa.Options.SourcePath = "ClientApp";

            if (env.IsDevelopment())
            {
                spa.UseAngularCliServer(npmScript: "start");
            }
      });

我希望用户应该重定向到身份服务器进行身份验证,并且在身份验证后我们的 Angular 应用程序应该打开。为此,我在 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();   
}

但是此代码不会自动重定向,因为我没有在使用 [Authorize] 的 asp.net 核心中定义任何控制器和操作方法

因此,我尝试自动重定向,我在 Angular 的 AppModule 类中编写代码来检查用户登录状态(如果未登录),然后使用 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();
            } 
        }));
    } 
}

它现在正在重定向到授权服务器,但我不确定这是否是好方法。

任何人都可以建议我们

4

0 回答 0