如何在 .NET Framework 4.7 ASP.NET Web API 端点上应用 Microsoft Identity Platform 身份验证

问题描述 投票:0回答:1

我有一个使用 .NET Framework 4.7.2 构建的旧版 ASP.NET Web API 应用程序,目前尚未为其实现身份验证。如何为此应用程序应用 Microsoft Identity Platform 身份验证。我希望此身份验证/授权仅应用于一个端点,而不是应用程序的其余部分。

我创建了另一个 .NET 6.0 ASP.NET Core Web API 应用程序,其

Startup.ConfigureServices
方法中包含以下语句。

JwtSecurityTokenHandler.DefaultMapInboundClaims = false;
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
     .AddMicrosoftIdentityWebApi(_configuration);

services.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, options =>
{
     // The claim in the Jwt token where App roles are available.
     options.TokenValidationParameters.RoleClaimType = "roles";
});

这个单独的 API 工作正常。现在,我尝试将经过身份验证的 API 请求从这个新应用程序发送到旧应用程序,并让旧端点担心身份验证。有人可以指导我正确的方法吗?到目前为止,我发现的最接近的问题是thisthisthis,但它们没有回答我的问题。

asp.net-web-api jwt claims-based-identity .net-4.8
1个回答
0
投票

我通过阅读原始问题中的所有链接问题、阅读本文并尝试不同的代码片段,找到了问题的解决方案。下面列出了我最终的工作更改。

创业班:

我为 OWIN 创建了这个

Startup
类。

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var authority = "{authority-URL}";
        var configurationManager = new ConfigurationManager<OpenIdConnectConfiguration>(
           authority + "/.well-known/openid-configuration",
           new OpenIdConnectConfigurationRetriever(),
           new HttpDocumentRetriever());
        var discoveryDocument = Task.Run(() => configurationManager.GetConfigurationAsync()).GetAwaiter().GetResult();
        
        app.UseJwtBearerAuthentication(
          new JwtBearerAuthenticationOptions
          {
              AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
              TokenValidationParameters = new TokenValidationParameters()
              {
                  ValidAudience = "{app-audience}",
                  ValidIssuer = "{issuer-URL}",
                  IssuerSigningKeyResolver = (token, securityToken, identifier, parameters) =>
                  {
                      return discoveryDocument.SigningKeys;
                  },
                  ValidateIssuerSigningKey = true,
                  ValidateIssuer = true,
                  ValidateAudience = false,
              }
          });
    }
}

Web.config:

我在

<appSettings>
部分添加了以下行:

<add key="owin:AutomaticAppStartup" value="true" />

授权属性:

我在想要应用身份验证的端点上添加了

[Authorize]
属性。

我在 StackOverflow 上读到的大多数答案都包含以下语句,但这些语句对我来说从来没有用,因为我不知道应用程序的密钥,

IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("jwt_signing_secret_key"))

但是这篇文章有一个替代示例,其中

IssuerSigningKeyResolver
是我的最后一块拼图。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.