質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

4016閲覧

Rails API認証方式について

suttannki317

総合スコア26

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

4クリップ

投稿2016/07/25 13:39

クライアントからAPIを呼び出す際の認証方式について教えてください。
管理画面からdeviseでログインして、クライアント(JS)からRailsで実装したAPIを呼び出しデータを取得する処理を実装しています。

APIでの認証についてですが、ログインしたタイミングでcookieに一意となるtokenをセットして、クライアントからtokenをAPIにリクエストすることで認証をかけています。
(テーブルにtokenが設定されていて、一致するかどうかで認証する仕組みです。)

懸念としては、cookieを盗まれることによるセキュリティの懸念があります。

上記のような場合、どのような認証をすることがセキュリティ的にも安全であるべき認証かというのがあれば教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

私も今現在APIの認証をどうしようか思案中ですので、回答とまでは言えませんが書いてみます。

まず通常「Web API」と言われるものではCookieは使わないと思います。
なぜならばCookieとはオリジン単位のものだからです。つまりAPIの利用者であるクライアントと、APIが同じオリジンでなければなりません。もちろん、SSKDsなAPIの(既知の開発者向け、もっと狭く言えば自分のWebアプリでサーバ側をWeb API、クライアントをAngularJSのようなものを使って構築するような)場合にはCookieも利用できますが、その辺はアプリの構成や運用形態次第でしょうか。
Cookieが利用できるならばtokenを使う必要はありません。Cookieに色々詰め込めます。ただし、クライアント側での改ざんを防止する必要があるので、Railsではcookies.signedを使うことになるでしょうか。

クライアントとAPIが別オリジンの場合には何かしらのtokenを使う必要があると思います。
そして私は**JSON Web Token(JWT)**でいいのでは、と考えています。厳密にいうとJWT形式のJWSというのでしょうか?Rubyならばgemもあります。
このトークンをクエリパラメータ、HTTPヘッダ、x-www-form-urlencodedなデータいずれかとしてクライアントにリクエスト時に付与してもらうのがいいのかと思います。

私はさらに一歩進んでOAuth2.0のアクセストークンとしてJWTを使おうかと考えています。理由は色々ありますが、標準化されたプロトコルでやりとりした方がいいかなあ、とそのくらいの考えです。

そしてCookieやトークンの盗難についてですが、これはそれらに有効期限を設けるくらいしか対策がないかと思います。CookieもJWTもOAuth2.0も有効期限が設定できます。そして有効期限が切れたら認証(ログイン)してトークンを再発行するという感じになると思います。
「期限きれるまでは盗まれても使えちゃうし、再ログインなんてクールじゃない。」等あるかと思いますが、どうなんでしょう。認証時に接続元をIPアドレスなりで判定して期限内に別アドレスからアクセスがあった場合にトークンを無効にする、とかもできると思いますがそこまで手間をかけるのだろうかという感じです。

私もエキスパートの方々のご意見をぜひ伺ってみたいです。

投稿2016/07/25 17:16

guest1213

総合スコア306

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問