gpt4 book ai didi

c# - 具有多个 .net 应用程序的 Web API 2.0 Owin 授权

转载 作者:太空狗 更新时间:2023-10-29 20:35:50 26 4
gpt4 key购买 nike

我有两个 .net 应用程序。这两个应用程序都有使用 C# 的 WebAPI 2.O API。

假设一个是父应用程序,另一个是子应用程序。父应用程序具有 Owin 身份验证,并且所有 API 都按预期与授权一起工作。

在子应用程序中,我想使用与父应用程序相同的授权提供程序。我不想再次对子应用程序使用身份验证。

我尝试过的两件事:

  1. 在两个应用程序中使用相同的机器 key

  2. 尝试创建第三个独立的 .net 应用程序,该应用程序将为这两个应用程序提供身份验证和授权。

第一个没有用。我不确定如何实现第二个目标。

如有任何帮助,我们将不胜感激。

谢谢。

最佳答案

因此,如果我理解正确的话,您需要一种方法来验证子服务,基于在服务之间传递身份验证的父服务身份验证。

我们在这里只需要同样的东西,来验证我们的前端服务(父服务)背后的微服务。

我们为此使用了 JWT,使用它我们可以解决这个问题,因为在子服务(在我们的例子中是微服务)上,它们信任父身份验证。

服务是这样工作的,父服务或其他身份验证服务创建要在父服务上使用的有效 JWT。

当父服务收到 JWT 时,它们将验证确保客户端正确所需的一切。当父服务需要调用子服务时,它会发送相同的 JWT,但在子服务上,JWT 将不相同,在我们的例子中,我们只验证 Lifetime 和 Issuer Sign Key。

我们最终在我们的子服务的 Startup.cs 文件中得到了这样的代码,我们的父服务/授权服务保持不变。

public static void ConfigureAuth(IServiceCollection services)
{
services
.AddAuthentication(o =>
{
o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(o =>
{
o.SaveToken = true;
o.TokenValidationParameters = new TokenValidationParameters
{
// Must validate the signing key
ValidateIssuerSigningKey = true,

// Must validate the life time
ValidateLifetime = true,

// The issuer may vary in a multitenant scenario,
// that's why we not valid the issuer.
ValidateIssuer = false,
ValidIssuer = o.ClaimsIssuer,

// Allowing passing a token among multiple services (audiences).
ValidateAudience = false,
ValidAudience = "",

// Does not require expiration
RequireExpirationTime = false,
ClockSkew = TimeSpan.Zero
};
});
}

如果您仍然有疑问,我建议您寻找微服务之间的身份验证,也许这会有所帮助。

关于c# - 具有多个 .net 应用程序的 Web API 2.0 Owin 授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50293062/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com