微服务架构中的授权

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

我正在构建一个具有微服务架构的应用程序,我将使用 RabbitMQ 作为消息代理来进行服务到服务通信以及从网关到服务的通信。但关于授权,我有一点想知道。

使用 NestJS,我可以轻松地将消息发送到任何服务并从它们那里获取响应,但是如何处理每个服务中的身份验证或更明确的问题,从网关向服务发送令牌的最佳实践是什么。这是我从现在开始所做的事情的总结。

我的控制器带有 AuthGuard,如您所见

@Controller()
@UseGuards(AuthGuard)
export class UserController {
    constructor(private readonly userService: UserService,
    ) {
    }

    @MessagePattern('user/me')
    async findOne(@Payload() params: FindOneDTO) {
        console.log(params);

        try {

            const user = await this.userService.findOne(params.id);
            return user;
        } catch (err) {
            console.log(err);
            throw err;
        }

    }
}

我的网关控制器向服务发送消息

@Controller('account')
@ApiTags("Account Methods")
export class AccountController {


    @Get(':id')
    async me(@Param('id', ParseIntPipe) id: number): Promise<any> {
        const dto: FindOneDTO = {id};
        const userAgentInfo = this.userAgentService.getUserAgentInfo();
        console.log(userAgentInfo);
        return this.sendMicroserviceRequest("user/me", dto);
    }
    
}

所以让我们来解决这个问题,我希望我的每个服务都可以自己与身份验证服务进行通信,但我不知道将授权令牌传递给服务的最佳实践是什么,因为现在它们只从网关接收 DTO,而没有我不想向 dto 添加令牌。

authentication jwt rabbitmq microservices token
1个回答
0
投票

也许您可以将令牌作为消息头传递?

在 RabbitMQ 中,您可以将令牌放入消息属性的标头中 (https://www.rabbitmq.com/publishers.html#message-properties)。

消费者可以检索此令牌并使用它来拨打电话。

注意:您必须处理令牌过期的情况。

© www.soinside.com 2019 - 2024. All rights reserved.