最近、タスクはトークンの作成時のセキュリティとsha512のサポートを強化することでした。 この記事は焦点を絞ったことが判明しましたが、これに遭遇したのは私だけではないと確信しています。
Symfony2でオンラインストアのAPIをプログラミングする際の現在の問題を解決するために、彼は
sha512アルゴリズムを使用して
FOSUserBundleと
WSSEAuthenticationBundleを友達にすることを決めました。 これについては、私の記事で説明します。
基本設定:
app/config/config.yml fos_user: db_driver: orm firewall_name: wsse_secured user_class: Acme\DemoBundle\Entity\User
コントローラーのトークン生成コード:
src\Acme\DemoBundle\Controller\SecurityController.php
この設定をそのまま使用したかったのですが、そうではありませんでした。 理由を理解しましょう。 Escapestudiosの標準プロバイダーには、次のような行があることがわかりました。
WSSEAuthenticationBundle/Security/Core/Authentication/Provider/Provider.php
最後から2番目の行にある引用符は興味深いものです。代わりに塩を追加すると、すべてが奇跡的に機能し始めます。 バンドル内のこのプロバイダーを書き換えて、状況を修正しましょう。
src\Acme\DemoBundle\Security\Authentication\Provider\WsseProvider.php namespace Acme\DemoBundle\Security\Authentication\Provider; use Escape\WSSEAuthenticationBundle\Security\Core\Authentication\Provider\Provider; use Symfony\Component\Security\Core\Authentication\Provider\AuthenticationProviderInterface; use Symfony\Component\Security\Core\Exception\CredentialsExpiredException; use Symfony\Component\Security\Core\Exception\NonceExpiredException; class WsseProvider extends Provider implements AuthenticationProviderInterface { protected function validateDigest($user, $digest, $nonce, $created, $secret) {
最後に、執筆時点でバンドルのバージョンでは、構成でnonceの使用を無効にすることはできず、受信したトークンは1回だけ有効であることに注意してください。 このチェック行を変更してノンスを追加するには、単純に削除できます。
このクラスを設定に追加します。
app/config/config.yml
それでは、少し防御を改善しましょう。 エンコーダーの設定には、次のような反復パラメーターがあります。
app/config/security.yml security: firewalls: wsse_secured: wsse: encoder:
このパラメーターは、トークンのエンコード/デコード中のハッシュ反復の回数を担当します。 デフォルトでは、「1」です。 比較のために、Symfony2でパスワードをハッシュする場合、「5000」です(Symfony \ Component \ Security \ Core \ Encoder \ MessageDigestPasswordEncoder)。
この機能を実装するには、コントローラーと構成にいくつかの変更を加えます。
app/config/security.yml parameters: wsse_iterations: 300 security: firewalls: wsse_secured: wsse: encoder:
実際、この記事の主なポイントはプロバイダーの1行の置き換えに限定されていますが、追加とその説明もかなり不適当です。 誰かが役に立つといいな。
DigitovビジネススクールのWeb開発
のコースに招待します 。
私はこれを教えています。
ジュニアPHP開発者になりたいです! (初心者向け)、
Symfony2。柔軟な開発 (専門家向け)、および同僚が行った
開発 :
Python / Django (初心者向け)および
Ruby on Railsでの Webアプリケーション開発 。 専門能力開発のためのレール (初心者向け)。 今すぐコースを購読すると、割引で購入できます
投稿者: Sergey Harlanchuk、シニアPHP開発者/チームリーダー、
SECLグループ/インターネットセールステクノロジー