小编Ser*_*giu的帖子

Lumen Auth 微服务

我正在开发我的第一个基于微服务的应用程序。与大多数微服务架构一样,有一个 API 网关可以减少客户端必须发出的请求数量。由于这是应用程序内的单一入口点,我认为这是必须检查授权的地方。所以我做了一个Authentication Microservice来处理登录、注册和身份验证检查。它使用带有 OAuth2 的 Passport。

在 API 网关中,我希望允许某些路由只能由经过身份验证的用户访问,因此一个好的方法是Auth Middleware捕获任何 HTTP 请求。由于身份验证只能在身份验证微服务中处理,我的想法是使用中间件内部的请求“ping”服务,然后检查响应代码。如果是200,API 网关将继续访问微服务。如果是401,API 网关将401自身返回到 UI。

这是我的想法的图形表示: 在此处输入图片说明

现在有2个问题:

  1. 这是该架构的好方法吗?

  2. 如何将请求从 API 网关 (Lumen) 传递到身份验证微服务 (Lumen) 以便进行检查?

(LE:我不必传递整个请求,我只需要传递Authorize标头,请查看下面的解决方案)

稍后编辑:

我已经设法在中间件中使用它解决了这个问题:

<?php

namespace App\Http\Middleware;

use Closure;
use GuzzleHttp\Client;

class Authenticate
{
    public function handle($request, Closure $next)
    {
        if($request->header('Authorization')) {
            $url = env('AUTHORIZATION_URL') . '/auth/check';
            $client = new Client();
            $headers = ['Authorization' => $request->header('Authorization')];
            $client = $client->request('GET', $url, ['headers' => $headers]); …
Run Code Online (Sandbox Code Playgroud)

authentication httprequest microservices lumen

7
推荐指数
0
解决办法
1853
查看次数