MASL OAuth 支持多重身份验证流程

MASL OAuth Supporting Multiple Authentication flows

我有一个客户端应用程序可以访问我的 WebAPI (1) 使用 Integrated Windows Authentication and the Authorization code [身份验证流程]。

现在我需要第二个 WebAPI (2) 访问原始 WebAPI (1) 以及使用 Client Credentials Authorization code Authentication flow.

我的问题是您是否可以配置 WebAPI (1) 以允许 EITHER 流以及在哪里进行,或者我是否必须构建一个完整的单独 API 来处理授权代码流动?我相信它会在 Startup.cs 的 ConfigureServices 方法中,但我不确定控制器的过滤器将如何处理添加客户端凭据过滤策略。

  services.AddControllers(options => {
    var policy = new AuthorizationPolicyBuilder()
            .RequireAuthenticatedUser()
            .RequireClaim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress")
            .Build();
    options.Filters.Add(new AuthorizeFilter(policy));
    //Add Authorization code filter here as well??
   });

在WebAPI的启动(一)中,RequireAuthenticationUser adds DenyAnonymousAuthorizationRequirement to the current instance which enforces that the current user is authenticated. This is, obviously, not going to work for the service-to-service authorization I am looking to implement so needed to be removed to permit both the Authentication flow AND ACL-based, Client Credentials Authentication flow.

此外,为了让 WebAPI (1) 允许 WebAPI (2) 的 ACL-based 身份验证令牌,我需要将以下内容添加到 WebAPI (1) 的配置中:

{
    "AzureAD"
    { 
        // other properties
        "AllowWebApiToBeAuthorizedByACL" : true,
        // other properties
    }
}

生成的配置策略最终看起来像:

var policy = new AuthorizationPolicyBuilder()
                   .RequireClaim("appid")
                    .Build();

希望遇到这个问题的人能找到这个并节省他们的时间。