ASP.NET Core 2多身份验证方法

时间:2018-01-31 22:53:47

标签: c# asp.net cookies asp.net-core asp.net-core-2.0

我试图在我看来是一个常见的用例,但我找不到太多文档或示例。

我的网站有一个用户界面和一组只有其他应用程序才能访问的网络服务。

用户使用AzureAD登录用户界面(尽管我还希望用户不会拥有AzureAD帐户)。

应用程序应使用用户名和密码登录,该用户名和密码应设置cookie,然后调用他们有权呼叫的Web服务(如果他们呼叫任何他们无权访问的话,则会出错。< / p>

我已经开始工作了,但是当我尝试使用用户名/密码Web服务进行身份验证时,_signInManager.PasswordSignInAsync()成功,我认为设置了正确的cookie,但是在此调用的User属性中没有设置Identity或任何后续电话。

这是我的初创公司:

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<IConfiguration>(Configuration);
    services.AddTransient<IUserStore<ApplicationUser>, UserStore>();
    services.AddTransient<IRoleStore<ApplicationRole>, RoleStore>();

    services.AddIdentity<ApplicationUser, ApplicationRole>()
        .AddDefaultTokenProviders();

    services.AddAuthentication(sharedOptions =>
    {
        sharedOptions.DefaultScheme = OpenIdConnectDefaults.AuthenticationScheme;
        sharedOptions.DefaultAuthenticateScheme = OpenIdConnectDefaults.AuthenticationScheme;
        sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
    })
    .AddAzureAd(options => Configuration.Bind("AzureAd", options))
    .AddCookie();

    services.AddMvc();
    services.AddSwaggerGen(c => c.SwaggerDoc("v1", new Info() {Title = "My API", Version = "v1"}));
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseForwardedHeaders(new ForwardedHeadersOptions
    {
        ForwardedHeaders = ForwardedHeaders.XForwardedHost | ForwardedHeaders.XForwardedProto
    });
    app.UseHttpMethodOverride();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseBrowserLink();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseStaticFiles();
    app.UseSwagger();
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
    });

    app.UseAuthentication();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

0 个答案:

没有答案