小编Tom*_*ane的帖子

SPA (Aurelia) + ASP.NET Core WebAPI + Google 身份验证

我的 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();
}
Run Code Online (Sandbox Code Playgroud)

Configure()我打电话app.UseAuthentication()

使用此设置时,我收到失败消息No SecurityTokenValidator 可用于令牌。 …

authentication single-page-application aurelia asp.net-core-webapi

6
推荐指数
1
解决办法
1181
查看次数

使用或不使用带有 ORM 的存储库

有很多声音说,在这个 ORM 时代,不再需要存储库。最近我自己也在思考这个问题,他们的论点对我来说通常是有道理的。

在我使用 EF Core 的新项目中,我想尝试使用无存储库方法来使事情变得更加直接和简单。毕竟,简单总是好的。

事情进展得很顺利,直到我意识到我经常写这样的东西(这不是真正的聚合,只是一个人为的例子):

ctx.Invoices.Include(x => x.User).ThenInclude(x => x.Address).Include(x => x.Items).FirstOrDefault(x => x.Id == id);
Run Code Online (Sandbox Code Playgroud)

好吧,所以每次我需要得到一个汇总时,我都需要写这个声明,并且有机会,有时/有人会忘记包含重要的参考文献。

将这段代码放入辅助类中怎么样?

class InvoiceHelper
{
  public Invoice FindById(int id) {...}
}
Run Code Online (Sandbox Code Playgroud)

这不是变相的存储库的开始吗?因此,即使使用 ORM,我仍然发现存储库很有用。

其他人如何做这些事情并且在没有存储库的情况下仍然感到高兴?

一些讨论无存储库方法的文章:

c# orm domain-driven-design entity-framework ddd-repositories

1
推荐指数
1
解决办法
672
查看次数