Попробуйте собрать аутентификацию с Symfony 4 / Apli Platform Token не найден 401 - PullRequest
0 голосов
/ 25 января 2019

Я хочу создать REST API с API PLATFORM и Symfony 4.2 Я просто пытаюсь сделать пользователя аутентифицированным, но каждый раз это не получается.

Я дам вам каждыйшаг, так что вы можете увидеть, где / почему мне не удается:

Создать проект Symfony и потребовать все необходимое:

composer create-project symfony/skeleton stackoverflow
cd ./stackoverflow
composer req api server maker

Затем я создаю пользователя, и он автоматически создает провайдера безопасности и т. д .:

php bin/console make:user

Затем я следую LexikJWTAuthenticationBundle Инструкции по установке:

composer req "lexik/jwt-authentication-bundle"
/**
* config/bundles.php
*/
return [
  Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
  Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
  Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true],
  Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true],
  Doctrine\Bundle\DoctrineCacheBundle\DoctrineCacheBundle::class => ['all' => true],
  Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true],
  ApiPlatform\Core\Bridge\Symfony\Bundle\ApiPlatformBundle::class => ['all' => true],
  Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true],
  Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
  Symfony\Bundle\WebServerBundle\WebServerBundle::class => ['dev' => true],
  Lexik\Bundle\JWTAuthenticationBundle\LexikJWTAuthenticationBundle::class => ['all' => true],
];
mkdir -p config/jwt
openssl genrsa -out config/jwt/private.pem -aes256 4096 // pw: stackoverflow
openssl rsa -pubout -in config/jwt/private.pem -out config/jwt/public.pem // pw : stackoverflow
/**
* config/packages/lexik_jwt_authentication.yaml
*/
lexik_jwt_authentication:
 secret_key:  '%env(resolve:JWT_SECRET_KEY)%'
 public_key:  '%env(resolve:JWT_PUBLIC_KEY)%'
 pass_phrase: '%env(JWT_PASSPHRASE)%'
 token_ttl:   3600
/**
* config/packages/security.yaml
*/
security:
encoders:
    App\Entity\User:
        algorithm: argon2i

providers:
    app_user_provider:
        entity:
            class: App\Entity\User
            property: email

firewalls:
    login:
        pattern:  ^/api/login
        stateless: true
        anonymous: true
        json_login:
            check_path:               /api/login_check
            success_handler:          lexik_jwt_authentication.handler.authentication_success
            failure_handler:          lexik_jwt_authentication.handler.authentication_failure
    api:
        pattern:   ^/api
        stateless: true
        guard:
            authenticators:
                - lexik_jwt_authentication.jwt_token_authenticator
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    main:
        anonymous: true

access_control:
    - { path: ^/admin/users, roles: ROLE_SUPER_ADMIN }
    - { path: ^/admin, roles: ROLE_ADMIN }

Запускаю сервер:

php bin/console server:run

И я пробую тест из документации:

curl -X POST -H "Content-Type: application / json" http://localhost/api/login_check -d '{"username": "johndoe", "password": "test"}«

1027 * Если это работает, вы получите что-то вроде этого:
1029 * { "маркер":«eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXUyJ9.eyJleHAiOjE0MzQ3Mjc1MzYsInVzZXJuYW1lIjoia29ybGVvbiIsImlhdCI6IjE0MzQ2NDExMzYifQ.nh0L_wuJy6ZKIQWh6OrW5hdLkviTs1_bau2GqYdDCB0Yqy_RplkFghsuqMpsFls8zKEErdX5TYCOR7muX0aQvQxGQ4mpBkvMDhJ4-pE4ct2obeMTr_s4X8nC00rBYPofrOONUOR4utbzvbd4d2xT_tj4TdR_0tsr91Y7VskCRFnoXAnNT-qQb7ci7HIBTbutb9zVStOFejrb4aLbr7Fl4byeIEYgp2Gd7gY»}

Я должен добавить Localhost:. 8000, конечно, и я получаю очень большая ошибка, она выглядела как 1000 строк JS источник сценария

1034 * Так я пропускаю ипопробуйте добавить кнопку авторизации в swagger:
/**
* config/packages/api_platform.yaml
*/
api_platform:
mapping:
    paths: ['%kernel.project_dir%/src/Entity']
swagger:
     api_keys:
         apiKey:    
            name: Authorization
            type: header

И когда я собираюсь localhost: 8000 я вижу:

code    401
message "JWT Token not found"

Я также попробую весь этот ответ: https://github.com/lexik/LexikJWTAuthenticationBundle/issues/451#issuecomment-443216804

Я нашел это, если он может помочь:1050 *

Cache-Control: без кеширования, частная Связь: закрыть Тип контента: application / json Дата: чт, 24 января 2019 21:51:51 +0100, четверг, 24 января 2019 20:51:51 GMTХост: localhost: 8000 Ссылка: http://localhost:8000/api/docs.jsonld; rel = "http://www.w3.org/ns/hydra/core#apiDocumentation" WWW-Authenticate: Bearer X-Powered-By: PHP / 7.2.14-1 + ubuntu18.04.1 + deb.sury.org + 1

Примите: текст / html, приложение / xhtml + xml, приложениеion / xml; q = 0,9, / ; q = 0,8 Accept-Encoding: gzip, deflate Accept-Language: fr, fr-FR; q = 0,8, en-US; q = 0,5, en;q = 0,3 Cache-Control: max-age = 0 Соединение: keep-alive DNT: 1 Хост: localhost: 8000 Upgrade-Insecure-Requests: 1 Пользователь-агент: Mozilla / 5.0 (Windows NT 10.0;Win64;x64;rv: 64.0) Gecko / 20100101 Firefox / 64.0

Возможно, проблема в том, что я не могу выполнить 2-ю / 3-ю ЧАСТИ Получить токен и использовать токен, я не знаю, имеет ли это значение.(Я думаю, это имя ошибки «токен не найден»), поэтому все это для этой FFS).

Ошибка, которую я получаю при попытке получить токен, похожа на 1000 строк JSИсточник сценария, я не могу сказать больше (я думаю, что он не может вставлять так долго).

Нужна помощь, спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...