ghost-agency/stateless-auth-bundle

处理无状态认证。

安装: 298

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 2

分支: 0

公开问题: 0

类型:symfony-bundle

1.0.0 2018-03-25 18:06 UTC

This package is not auto-updated.

Last update: 2024-09-29 05:09:17 UTC


README

Build Status

无需SSH密钥即可处理无状态认证。(灵感来自 LexikJWTAuthenticationBundle)

入门指南

先决条件

此包需要Symfony 2.8+。

提示:虽然此包不强制您这样做,但强烈建议使用HTTPS。

安装

ghost-agency/stateless-auth-bundle 添加到您的 composer.json 文件中

php composer.phar require "ghost-agency/stateless-auth-bundle"

app/AppKernel.php 中注册该包

public function registerBundles()
{
    return array(
        // ...
        new GhostAgency\Bundle\StatelessAuthBundle\GhostAgencyStatelessAuthBundle(),
    );
}

配置

在您的 config.yml 中配置哈希密钥

ghost_agency_stateless_auth:
    hash_key:  '%env(JWT_TOKEN_KEY)%'
    token_ttl: '%env(JWT_TOKEN_TTL)%' # Default to 3600 (1 hour)

配置您的 security.yml

security:
    # ...
    
    firewalls:

        main:
            pattern:  ^/api/login
            stateless: true
            anonymous: true
            json_login:
                check_path:               /api/login_check
                success_handler:          ghost_agency_stateless_auth.success_handler
                require_previous_session: false

        api:
            pattern:   ^/api
            stateless: true
            guard:
                authenticators:
                    - ghost_agency_stateless_auth.guard

    access_control:
        - { path: ^/api/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/api,       roles: IS_AUTHENTICATED_FULLY }

配置您的 routing.yml

api_login_check:
    path: /api/login_check

用法

1. 获取令牌

第一步是使用其凭证验证用户。一个匿名可访问的防火墙上的经典 form_login 就可以做到这一点。

只需将提供的 ghost_agency_stateless_auth.success_handler 服务设置为成功处理程序,生成令牌并将其作为 JSON 响应体的一部分发送。

存储它(客户端),JWT 在其 ttl 过期之前可重复使用(默认为 3600 秒)。

注意:您可以使用如下的简单 curl 命令测试获取令牌

curl -X POST https://:8000/api/login_check --data {"username": "Miaou", "password": "LeChat"}

如果成功,您将收到类似以下的内容

{
   "token" : "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXUyJ9.eyJleHAiOjE0MzQ3Mjc1MzYsInVzZXJuYW1lIjoia29ybGVvbiIsImlhdCI6IjE0MzQ2NDExMzYifQ.nh0L_wuJy6ZKIQWh6OrW5hdLkviTs1_bau2GqYdDCB0Yqy_RplkFghsuqMpsFls8zKEErdX5TYCOR7muX0aQvQxGQ4mpBkvMDhJ4-pE4ct2obeMTr_s4X8nC00rBYPofrOONUOR4utbzvbd4d2xT_tj4TdR_0tsr91Y7VskCRFnoXAnNT-qQb7ci7HIBTbutb9zVStOFejrb4aLbr7Fl4byeIEYgp2Gd7gY"
}

2. 使用令牌

简单地将 JWT 作为授权头传递给每个受保护的防火墙请求。

默认情况下,仅启用授权头模式: Authorization: Bearer {token}

Apache用户的重要提示

此链接此链接 中所述,Apache 服务器将删除任何不在有效 HTTP BASIC AUTH 格式中的 Authorization header

如果您打算使用此包的授权头模式(您应该这样做),请将这些规则添加到您的 VirtualHost 配置中

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]