gpt4 book ai didi

asp.net-web-api - 用于多个应用程序的 OWIN 身份验证服务器

转载 作者:行者123 更新时间:2023-12-01 11:32:46 24 4
gpt4 key购买 nike

我正在实现一个解决方案,该解决方案具有 MVC 客户端(我们在 localhost:4077/调用此 CLIENT)和 WebAPI 服务(在 localhost:4078/调用 API)

我已经在 API 中实现了 OWIN OAuth,但想知道 OWIN 是否可以在单独的解决方案中实现(我们在 localhost:4079/token 将其称为 AUTH)来为 CLIENT 生成 token ,然后 CLIENT 传递这个到 API(作为 Bearer 授权 token )

我查询的原因是客户端可能会访问其他 WebAPI 服务,我想在客户端和所有 API 服务之间使用 OWIN。

问题是我不确定 AUTH 服务生成的 token 是否可用于授权 CLIENT 和所有 API 服务上的所有请求。

有没有人实现过这样的东西,如果可以的话,你能举个例子吗,我对 OWIN 和 OAUTH 还很陌生,所以非常感谢任何帮助

最佳答案

将授权服务器与资源服务器分开非常容易:如果您使用 IIS 并且在两个应用程序/服务器上配置了相同的机器 key ,它甚至可以在没有任何额外代码的情况下工作。

如果您需要选择访问 token 可以访问哪些端点,则使用 OWIN OAuth2 服务器实现支持多个资源服务器会有点困难。如果您不关心这一点,只需使用相同的机器 key 配置所有资源服务器,您就可以使用相同的 token 访问所有 API。

要更好地控制可与访问 token 一起使用的端点,您应该查看 AspNet.Security.OpenIdConnect.Server - OWIN 附带的 OAuth2 服务器的分支/Katana - native 支持此场景:https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server .

设置相对容易:

在您的授权服务器应用程序中添加一个新的中间件颁发 token (在 Startup.cs 中):

app.UseOpenIdConnectServer(new OpenIdConnectServerOptions
{
Provider = new AuthorizationProvider()
});

在您的不同 API 服务器(在 Startup.cs 中)添加新的中间件验证访问 token :

app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
// AllowedAudiences MUST contain the absolute URL of your API.
AllowedAudiences = new[] { "http://localhost:11111/" },

// X509CertificateSecurityTokenProvider MUST be initialized with an issuer corresponding to the absolute URL of the authorization server.
IssuerSecurityTokenProviders = new[] { new X509CertificateSecurityTokenProvider("http://localhost:50000/", certificate) }
});

app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
// AllowedAudiences MUST contain the absolute URL of your API.
AllowedAudiences = new[] { "http://localhost:22222/" },

// X509CertificateSecurityTokenProvider MUST be initialized with an issuer corresponding to the absolute URL of the authorization server.
IssuerSecurityTokenProviders = new[] { new X509CertificateSecurityTokenProvider("http://localhost:50000/", certificate) }
});

最后,在您的客户端应用中添加一个新的 OpenID Connect 客户端中间件(在 Startup.cs 中):

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
// Some essential parameters have been omitted for brevity.
// See https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server/blob/dev/samples/Mvc/Mvc.Client/Startup.cs for more information

// Authority MUST correspond to the absolute URL of the authorization server.
Authority = "http://localhost:50000/",

// Resource represents the different endpoints the
// access token should be issued for (values must be space-delimited).
// In this case, the access token will be requested for both APIs.
Resource = "http://localhost:11111/ http://localhost:22222/",
});

您可以查看此示例以获取更多信息:https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server/blob/dev/samples/Mvc/

它不使用多个资源服务器,但使用我提到的不同步骤调整它应该不难。如果您需要帮助,请随时联系我。

关于asp.net-web-api - 用于多个应用程序的 OWIN 身份验证服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30823834/

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