elyerr / passport-connect
允许通过 outh2-passport-server 容易地连接微服务
v1.0.7
2024-05-06 18:47 UTC
Requires
- elyerr/api-response: ^1.0
- guzzlehttp/guzzle: ^7.8
Requires (Dev)
- laravel/framework: ^10.38
README
允许轻松地将任何微服务连接到主服务器,此插件仅与授权服务器 outh2-server 一起工作
配置
发布配置
发布配置文件和环境变量需要执行以下命令,这是与主服务器配置所需的。
php artisan vendor:publish --tag=passport_connect
创建公共客户端
- 这需要在 aouth2 服务器的终端内执行以下命令
php artisan passport:client --public
该命令将在生成客户端 ID 之前提出三个问题
- 在第一个问题中,您可以输入任何数字,该数字不应与其他现有客户端重复。例如 100
- 在第二个问题中,您需要为客户端分配一个名称,您可以添加您的应用程序名称以便于关联,例如 "users"
- 在第三个参数中,您需要添加微服务的域名,并添加 callback 路径,例如 http://users.dominio.dom/callback,完成后,您将获得类似以下 uuid 的值
9af032fb-e984-4d0a-a6b8-bebabf129c14
,您需要将其分配到 passport-connect 的配置中 server_id 键下
禁用 COOKIES 加密
在 Laravel 中,您需要在 EncryptCookies 中间件内添加构造函数并导入以下名称,这样可以避免包生成的 cookies 被加密
use Illuminate\Contracts\Encryption\Encrypter as EncrypterContract;
- 类构造函数
public function __construct(EncrypterContract $encrypter) { parent::__construct($encrypter); $except = [ config('passport_connect.ids.jwt_token'), config('passport_connect.ids.jwt_refresh'), ];
$this->except = array_merge($this->except, $except); }
### GENERAR RUTAS DE CREDENCIALES
Recuerda que antes de poder usar las rutas deberás configurar las rutas todo lo necesario en el archivo **passport-connect.php** en la carpeta **config** de laravel
php artisan passport-connect:client-public
## VARIABLES DE ENTORNO NECESARIAS
SERVER_ID="9b3a1165-5af7-4619-a04d-a51d16134acf"
授权服务器
SERVER=https://servicio.dominio.com
授权模式
PROMPT_MODE=consent #consent|none|login
创建 cookies 所需,如果使用全局令牌则更改 .dominio.com
SESSION_DOMAIN=servicio.dominio.com
创建自定义名称或当是全局令牌时使用
PASSPORT_TOKEN="astian_server"
PASSPORT_REFRESH="${PASSPORT_TOKEN}_refresh"
客户端的 scopes
CLIENT_SCOPES='scope1 scope2 scopex'
登录后重定向
REDIRECT_TO='/'
发送通知到所有用户的必需密钥
VERIFY_NOTIFICATION
## MIDDLEWARES
Clases encargadas de interceptar las peticiones y actuar con base en las credenciales del usuario, son las encargadas de crear el puente con el sistema de autorización para proporcionarte acceso al sistema.
- **Authorization**: se encarga de verificar si el token jwt es correcto y también se encarga de generar nuevas credenciales cuando estas vencen, siempre que los datos sean válidos. Este middleware debe usarse para proteger todas las rutas del micro servicio que requiera una authorizacion minima, esta debe ser usada sola o en conjunto con los demás middleware.
- **CheckClientCredentials**: el funcionamiento de este middlware comprueba si un cliente pertenece al gran_type client_credentials.
- **CheckForAnyScope**: Encargado de verificar si los scopes o permisos asignados al usuario corresponden a la zona donde solicita acceso, a diferencia del siguiente bastara con que solo tenga un permisos de todos los que se requieren para poder acceder.
- **CheckScopes**: funciona igual al anterior pero este verificara que todos los scopes estén precentes para poder dejar pasar la petición.
El middleware 2,3 y 4 deben ser usados con el primer middleware para su correcto funcionamiento, si bien el primero no requiere de los demás necesariamente requieren del primero.
# TRAIT
El paquete implemente un trait , el cual contiene una funcion **userCan** y **user** , que puede ser usado para verificar si un usuario tiene permisos con un scopes especifico o mostrar los datos del usuario autenticado.
Se debe importar la siguiente denominacion
use Elyerr\Passport\Connect\Traits\Passport;
Se debe agregar a la clase
class Test {
use Passport;
public function __construct(){
//puedes acceder a ella de la siguiente manera pasandole el nombre del escope
$variable = $this->userCan('test');
/**
* envia una notificacion a un usuario, grupo de usuario , o a todos
* en users acepta un email o correo electronico, un scope apara ese grupo de usuarios o asteristco '*' para todos los usuarios
*
*/
$this->send_notification([
'via' => ['database'], //database o email
'subject' => 'hola', //string
'message' => 'que tal', //string
'users' => 'admin@admin.com',
'resource' => 'https://admin.com.pe', // link
]);*/
//examina si tiene un scope tiene permiso sobre la session
$this->userCan('assets');
//obtiene datos del usuario
$this->user()
}
}