【问题标题】:How to version an API such that one version of the api will require a bearer token and the other version does not如何对 API 进行版本控制,以便一个版本的 api 需要不记名令牌,而另一个版本不需要
【发布时间】:2021-05-27 16:28:50
【问题描述】:

我有一个 asp.net 核心 web api。假设我想拥有两个版本的 api,这样,版本 1 将需要不记名令牌,而版本 2 将不需要裸令牌。

由于令牌配置代码驻留在 startup.cs 文件中,我如何有两个 startup.cs 文件来满足我上面的要求?我什至不确定拥有两个针对两个不同版本的 api 的 startup.cs 文件是否合法,因为配置 asp.net 核心 api 版本控制的代码也将驻留在 startup.cs 文件中。

让我知道有哪些选项可以满足我的上述要求。

我当前启用令牌身份验证的 startup.cs 文件如下所示..

public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<AzureADSettings>(Configuration.GetSection("AzureAd"));
        var azureADSettings = Configuration.GetSection("AzureAd").Get<AzureADSettings>();
        var validAudience = new List<string>
        {
            azureADSettings.Audience
        };



        services.AddAuthentication(o =>
        {
            o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        })
        .AddJwtBearer(o =>
        {
            o.Authority = $"{azureADSettings.Instance}/{azureADSettings.TenantId}/";
            o.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateAudience = true,
                //azureADSettings.Audience
                ValidAudiences = new List<string>(validAudience)
            };
        });
}

【问题讨论】:

  • 你能不能在appsettings中放一个像"Auth": true这样的部分,然后调用Configuration.GetSection("Auth");找出这个版本是否使用了auth,然后在AddAuthentication之前放一个if语句

标签: asp.net-core asp.net-core-webapi


【解决方案1】:

Authorize 中间件适用于检查您是否没有像 Anonymous 那样明确地控制器或操作。也许你能做的是:

  1. [Anonymous] 属性放在控制器的顶部。
  2. 将控制器中的 v1 API 端点标记为 [Authorize]
  3. 保持 v2 API 端点不变。

这样,v2 API 端点应该可以在没有不记名令牌的用户中正常工作,但 v1 API 端点应该需要有效的不记名令牌。

【讨论】:

  • 我认为这应该可行!我保持这个问题是开放的,看看是否还有其他选择!!谢谢!
猜你喜欢
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 2016-03-08
  • 1970-01-01
  • 2016-03-27
  • 2021-11-30
  • 1970-01-01
相关资源
最近更新 更多