FOSUserBundle/RestBundle/OAuthServerBundleトリオを設定してヘッドレスバックエンドを作成する作業を進めており、別のフロントエンドをモバイルに展開してから、可能な第三者APIアクセス。利用可能なさまざまなリソースと指示に基づいて一般的な設定を行い、クライアントの資格情報を使用してアクセストークンを生成することができます。FOSUserBundle + FOSOAuthServerBundleを使用したユーザー認証フロー
これが追加されるアプリケーションは、フロントエンド/バックエンドの対話に標準のSymfony/Twigを使用し、認証にFOSUserBundleを使用する既存のものです。
私は、認証の流れに関連して2つの問題があります。
- 私は、ユーザーがクライアントレベルを超えて認証せずにAPIの一部にアクセスできるようにしたいと思っています。また、ユーザーレベルの認証が要求されたリソースの所有者であることを確認する必要があります。私はこれを行う方法を見つけることができません。私はポストが可能性について話しているが、それがどのように成し遂げられるかについての何らかの指示を何も与えていないことを発見した私は適切なアクセスのためにコントローラーレベルでチェックする必要があると思います。おそらく、カスタムの投票者を使用して、 'IS_AUTHENTICATED_FULLY'のチェックがクライアントで認証された後に真実に戻ってくることがあります。 UIログインフォームをバイパスしてプログラムでユーザーを認証できるようにしたい - FOSUserBundleログインコントローラーをオーバーライドするだけかもしれないが、わからない。
- アクセストークンの有効期限がないクライアントを作成するか、リフレッシュトークンを実装する方法を見つける必要があります。私は自分のアプリケーションがトークンをリフレッシュする必要があるのは本当にわかりませんが、それが標準的な方法であれば、それに従うことで大丈夫です。
以下に関連するコードがありますが、コードはFOSOAuthServerセットアップガイドからコピーされたかなり標準的なものです。
のsecurity.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
oauth_token:
pattern: ^/oauth/v2/token
security: false
rest:
pattern: ^/rest(?!/doc)
fos_oauth: true
stateless: true
anonymous: false
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager
success_handler: security.authentication.success_handler
use_referer: true
logout: true
anonymous: true
access_control:
- { path: ^/rest, roles: [ IS_AUTHENTICATED_FULLY ] }
config.ymlが
fos_user:
db_driver: orm
firewall_name: main
user_class: AppBundle\Entity\User
registration:
form:
type: AppBundle\Form\Type\RegistrationFormType
profile:
form:
type: user_profile
fos_oauth_server:
db_driver: orm
client_class: AppBundle\Entity\Client
access_token_class: AppBundle\Entity\AccessToken
refresh_token_class: AppBundle\Entity\RefreshToken
auth_code_class: AppBundle\Entity\AuthCode
service:
user_provider: fos_user.user_provider.username_email
options:
supported_scopes: user
fos_rest:
view:
view_response_listener: force
formats:
json: true
templating_formats:
html: true
mime_types:
json: ['application/json', 'application/json;version=1.0', 'application/json;version=1.1']
jpg: ['image/jpeg']
png: ['image/png']
body_listener: true
param_fetcher_listener: true
allowed_methods_listener: true
format_listener:
rules:
- { path: ^/, priorities: [html, json], fallback_format: json, prefer_extension: false }