gpt4 book ai didi

asp.net-web-api - 身份验证和授权作为中央微服务 ASP.NET

转载 作者:行者123 更新时间:2023-12-04 04:29:59 25 4
gpt4 key购买 nike

我计划将包含身份验证和授权以及所有服务的 ASP.NET Web API 2.0 更改为微服务架构。

我的问题是否创建了一个中央微服务来处理身份验证和授权。我如何授权用户将带有 token 的请求发送到其他服务?

详细说明这个问题:

假设我有三个微服务。
1 ) ASP NET 框架处理身份验证和授权,它将对用户进行身份验证并发送 token 。
2 ) 订单服务,它将接收带有 header 中的 token 的请求。 (ASP.NET 核心)
3 ) Accounting 服务,它将接收在其 header 中带有 token 的请求。 (ASP.NET 核心)

当用户调用服务 2 或 3 时,我们如何授权用户?
这是一种理想的方法吗?

最佳答案

我会安装一个网关(例如 Ocelot,它可以使用您正在使用的任何系统为您处理外部“上游”身份验证),而不是在每个微服务上验证外部请求(您可能希望为内部微服务通信执行此操作) ,例如对于 Jwt 承载:

public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication()
.AddJwtBearer("TestScheme", x => ...
}

然后在 Ocelot 中,您可以决定哪些路线需要此方案,如下所示
"Routes": [{
"DownstreamHostAndPorts": [...],
"DownstreamPathTemplate": "/",
"UpstreamPathTemplate": "/",
"AuthenticationOptions": {
"AuthenticationProviderKey": "TestScheme", //<--here decide to use this scheme
"AllowedScopes": []
}
}]


如果身份验证成功,您可以使用 Ocelot 从上游到下游的“声明到声明转换”的方法 this method - 我个人想要自定义它并为内部身份验证构建一个新的 Jwt token ,因此使用了我自己的下游处理程序,如下所示:

services
.AddHttpClient<IMyService, MyService>(client => ...)
.AddHttpMessageHandler<MyJwtDownstreamHandler>();

//then in the MyJwtDownstreamHandler
request.Headers.Authorization = new AuthenticationHeaderValue(
"bearer",
TokenGenerator.Generate( //<--generate your own Symmetric token using your own method
identity: myIdentity, //<--claims for downstream here
)
);

关于asp.net-web-api - 身份验证和授权作为中央微服务 ASP.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55577061/

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