我的SPA应用程序(使用Aurelia)调用了ASP.NET Core 2 Web API。我需要使用Google OIDC提供程序对用户进行身份验证,并且还需要使用相同的方法来保护Web API。

目前,我能够在客户端(SPA)上对用户进行身份验证,并检索ID令牌和访问令牌。每次API调用时,我都会在标头中发送访问令牌。

现在,我不确定如何处理服务器端以验证令牌以及授予或拒绝对API的访问。我遵循官方文档如何添加外部登录提供程序,但它似乎仅适用于服务器端MVC应用程序。

有什么简单的方法可以做到这一点吗?

我认为例如IdentityServer4可以支持这种情况,但是在我看来,对于我需要做的事情来说太复杂了。毕竟,我不需要自己的身份/授权服务器。

更新:

基于Miroslav Popovic的答案,我对ASP.NET Core 2.0的配置如下所示:

public void ConfigureServices(IServiceCollection services)
{
  services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(o =>
  {
    o.Authority = "https://accounts.google.com";
    o.TokenValidationParameters = new TokenValidationParameters
    {
      ValidIssuer = "accounts.google.com",
      ValidAudience = "xxxxxxxxxxxxx.apps.googleusercontent.com",
      ValidateAudience = true,
      ValidateIssuer = true
    };
  });

  services.AddMvc();
}


Configure()中,我称为app.UseAuthentication()

使用此设置时,出现失败消息No SecurityTokenValidator可用于令牌。

更新2:

我成功了服务器配置正确。问题是我正在向API发送access_token而不是id_token。

最佳答案

由于您已经具有访问令牌,因此使用它添加身份验证应该不会太困难。您可能需要遵循以下原则(未经测试):

// Inside Startup.cs, ConfigureServices method
services
    .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(
        options =>
        {
            var tokenValidationParameters = new TokenValidationParameters
            {
                ValidIssuer = "accounts.google.com",
                ValidateAudience = false
            };

            options.MetadataAddress = "https://accounts.google.com/.well-known/openid-configuration";
            options.TokenValidationParameters = tokenValidationParameters;
    });

// Inside Startup.cs, Configure method
app.UseAuthentication(); // Before MVC middleware
app.UseMvc();

// And of course, on your controllers:
[Authorize]
public class MyApiController : Controller


Paul Rowe的This post可能会提供更多帮助,但请注意,它是为ASP.NET Core 1.x编写的,而身份验证API在2.0中有所变化。

关于SO的信息也很多,例如this question

关于authentication - SPA(Aurelia)+ ASP.NET Core Web API + Google身份验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47849249/

10-17 01:45