認証を必要とするREST APIを開発しています。認証自体はHTTPを介した外部のWebサービスを介して行われるため、認証サービスを繰り返し呼び出すことを避けるためにトークンをディスペンスすることを考えました。これは私の最初の質問に私をきちんともたらします:
これは、クライアントが要求ごとにHTTP基本認証を使用することを要求し、サーバー側の認証サービスへの呼び出しをキャッシュすることよりも本当に良いですか?
基本認証ソリューションには、コンテンツのリクエストを開始する前にサーバーへの完全なラウンドトリップを必要としないという利点があります。トークンは潜在的にスコープがより柔軟である可能性があります(つまり、特定のリソースまたはアクションへの権限のみを付与する)ことができますが、OAuthコンテキストには私の単純なユースケースよりも適切と思われます。
現在、トークンは次のように取得されます。
curl -X POST localhost/token --data "api_key=81169d80...
&verifier=2f5ae51a...
×tamp=1234567
&user=foo
&pass=bar"
api_key
、timestamp
およびverifier
すべてのリクエストにより要求されています。「ベリファイア」は以下によって返されます。
sha1(timestamp + api_key + shared_secret)
私の意図は、既知の当事者からの通話のみを許可し、通話がそのまま再利用されるのを防ぐことです。
これで十分ですか?アンダーキル?やりすぎ?
トークンを入手すると、クライアントはリソースを取得できます。
curl localhost/posts?api_key=81169d80...
&verifier=81169d80...
&token=9fUyas64...
×tamp=1234567
可能な限り単純な呼び出しの場合、これは恐ろしく冗長なもののようです。考えるとshared_secret
(最低でも)に埋め込まれている羽目になるのiOSアプリケーション、私はそれが抽出できると仮定思われるから、これでも製品は、誤った安心感を越えて何ですか?