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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

Q&A

解決済

1回答

5987閲覧

WebAPIのユーザ認証

akaryu0206

総合スコア28

Ruby

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

1グッド

4クリップ

投稿2016/12/22 03:30

環境、構成

[フロントエンド]
Rails4
UI、バックエンド(WebAPI)とのやり取りを担当

[バックエンド]
Rails4
フロントエンドからリクエストを受け付けてJSONを返すWebAPI

質問内容

上記のような構成で認証が必要なWebアプリケーションを開発しているのですが、
ユーザ認証関連の処理でどうするのがよいのか不明な点があるので質問させて頂きます。

現状、以下のような流れでユーザ認証処理を実装しています。

  1. フロントエンドでログインフォームにID、パスワードを入力してSubmit
  2. SubmitされたID、パスワードをバックエンドにPOST
  3. バックエンドはPOSTされてきたID、パスワードで認証処理を行い、認証に成功すればアクセストークン等の認証情報をJSONで返す
  4. フロントエンドは返ってきた認証情報を保持し、認証済みでないとアクセスできないページに移動

この流れの4.が不明な点でして、バックエンドから返ってきた認証情報はフロントエンドでどのように保持すればいいのでしょうか?
今は単純に認証情報をセッションに保存してページ移動の度にバックエンドに認証情報の整合性チェックをリクエストする、といった方法で実現しています。
これでも普通に要求を満たした動作はしているので問題は無いのですが、セッションで保持するということに漠然とした不安があります。

フロントエンドとバックエンドが分離していない、RailsのModel, View, Controllerを用いたシンプルなアプリケーションの場合は
認証情報はセッションに保持するのが普通だと思いますが、
今回のような構成でも認証情報の保持にセッションを使うのは普通なのでしょうか?

そもそもの話

フロントエンドにRailsを使わずにAngularJSやVue.jsなどのJSフレームワークを使えばこのようなことを気にする必要もないのでしょうか?
「まずフロントエンドにRailsを使っていたらバックエンドと分離する意味が無くない?」と思われるかもしれませんが、
私がフロントエンドに疎いサーバサイド寄りのレガシーなエンジニアでして、とりあえず動くものを作るためにフロントエンドもRailsで構築しました。
いずれはJSフレームワーク等で置き換えるつもりではあります。

以上、ご回答頂ければ幸いです。

shugo👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは。stakezakiと申します。
Railsには詳しくないのですが、以下、私だったらどうするかというスタンスで回答したいと思います。

この流れの4.が不明な点でして、バックエンドから返ってきた認証情報はフロントエンドでどのように保持すればいいのでしょうか?

セッションは、ブラウザからのログイン認証が通ってからログアウトするまでの間、フロントエンドで管理するのが一般的です。
ログイン認証をバックエンドで実行したとしても、認証後にフロントエンドのセッションにトークンを保持するのは普通だと思います。
あくまで、セッションの管理の主体はフロントエンドなのでタイムアウトもしくはログアウトが実行されればバックエンドの状態にかかわらずセッションと認証トークンは破棄されることになります。

逆に、セッションが有効な間はバックエンドにエラーなくアクセスできないとだめなので、アクセストークンの有効期限切れがセッション有効期間中に発生しないように注意する必要があります。
バックエンドでセッション管理してしまうとフロントエンドとのタイムラグが出てしまうので、バックエンドではステートレスにするのがオススメです。
バックエンドでもセッション管理する場合は、フロントエンドより長い時間をセットしなければなりません。
セッションはユーザのアクションがあればタイムアウト時間が延長されるので、それに合わせてバックエンドのセッションも延長されなければなりません。

RESTの原則としてはステートレスであることがよくいわれますが、私は普通のWebアプリケーション(SPAを含む)でもWebAPI(REST)でもセッションの考え方はそれほど違わないと考えています。(ただし、スマホは除く)

関連情報として、ちょっと古くて恐縮ですが、WebAPI認証について や、RESTに関する3つの間違いもあわせて読んでいただけると、もしかしたら参考になるかもしれません。

投稿2016/12/26 15:11

stakezaki

総合スコア46

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問