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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

1回答

2460閲覧

laravel passportのclient_secretの扱いについて

tsuka_rinorino

総合スコア229

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2019/03/29 02:14

編集2019/03/29 03:09

laravel passportを利用し、LaravelとVue.jsを使いmailとpasswordでログイン出来る仕組みを作成しようとしています。
http://localhost/oauth/tokenにpostしてトークンを取得することができました。

{ "grant_type": "password", "client_id": "2", "client_secret": "xxxxxxxxxx", "username": "user@example.com", "password": "password", "scope": "*" }

しかし、この形ではclient_secretが見えてしまいます。
client_secretは完全に秘匿するものなのか、それとも見えてしまうのはしょうがないものなのでしょうか?
もし、秘匿すべきものであれば秘匿方法などご教授いただきたいです。よろしくおねがいします。

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

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

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

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

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

xenbeat

2019/03/30 09:24 編集

そもそもの話ですが、サービス上にホストされる「データへアクセスできるアプリケーション」は①のイメージですか?②のイメージですか?例えばあなたがFacebookのようなアプリを作ろうとしているとして。 ①自社製のアプリケーション(例:Facebook)のみ ②自社製のアプリケーション(例:Facebook)に加え、第三者が作成するアプリケーション(例:Teratail, Retty等)がある
tsuka_rinorino

2019/03/30 10:38 編集

質問ありがとうございます。 ①に該当します。 自サイト(同一ドメイン)のみでのやり取りを考えています。 ・バックはLaravel api ・フロントはVue.js axios
guest

回答1

0

ベストアンサー

client_secretは完全に秘匿するものなのか、それとも見えてしまうのはしょうがないものなのでしょうか?

secretという名の通り秘匿するべきものです。

ただ、そもそも質問者さんの場合はLaravel Passport (OAuth2)を使う必要はありません。
追記依頼の質問に対する回答が「自サイト(同一ドメイン)のみでのやり取りを考えています」とのことですので。

LaravelとVue.jsを使いmailとpasswordでログイン出来る仕組みを作成

Laravelがデフォルトで用意しているトークンで対応するか、
jwt-authのようなライブラリを使ってJWTで対応されることを強く推奨します。

どこまでOAuth2を理解されているかわかりませんが、仕様はrfc6749で定義されています。
そちらの冒頭にも記載されている通り、基本的に**OAuth2はデータへのアクセスをthird-party applicationに「許可」するためのフレームワーク**です。

もちろん質問者さんがやろうとしているようにOAuth2Resource Owner Password Credentials Grant(以下Password Grant)をfirst-party applicationの「認証」に適用できないことはないですがOAuth2の本来の目的から外れる上、費用対効果が低いのでオススメしません。

もし、秘匿すべきものであれば秘匿方法などご教授いただきたいです。

もしLaravel Passport(以下パッケージ)が要求するclient_secretをべき論で隠すというのであれば、こちらのようにクライアントの認証情報をサーバーに隠すことになるでしょう。

しかし、そもそもrfc的にはPassword Grantでclient_secretを渡す必要が基本的にありませんので、client_secretを必ず渡さないといけないというのはパッケージ独自の仕様となります。
https://tools.ietf.org/html/rfc6749#section-4.3.2

パッケージがclient_secretを要求することについては以下で議論されてるっぽいので、将来的にclient_secretを渡さなくても良くなるかもしれません。
https://github.com/laravel/passport/issues/984
https://github.com/thephpleague/oauth2-server/issues/889

以上の通り、もしLaravel Passportを使う明確な理由をお持ちで、どうしてもそれを使わなければならないというのであれば引き止めはしませんが、質問者さんの場合は別の方法をおすすめしますという回答になります。

以下はTeratailで関連する質問です。OAuth2の仕様を絡めてそもそも的な回答ではないですが、少しでも参考になれば。
API - laravelを使ってapiサーバを作る際のログイン認証の仕組みで困っています。|teratail
PHP - Lalavel でログインしているか外部から確認したい|teratail

投稿2019/03/30 12:38

編集2019/04/03 19:42
xenbeat

総合スコア4258

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

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

tsuka_rinorino

2019/03/31 08:31

大変分かりやすく、参考サイトまでありがとうございます。 やはりlaravel passportの`client_secret`が不思議な仕様なんですね。 無理やり使うのは私では危なそうなので、仰っているように認証トークンを利用しようと思います。 ありがとうございました。
xenbeat

2019/05/05 20:46 編集

> laravel passportの`client_secret`が不思議な仕様なんですね。 無理やり「first-party application」を「認証」するために独自の解釈がされている印象ですね。 パッケージのポリシーとしてはそれが正解なのかもしれませんが、、、回答にも書いた通りOAuth2は本来 「first-party application」を「認証」するためのものではなく 「third-party application」を「認可」するためのものなので。 現状、公式ドキュメントは誤解を招くような書き方をされてますし、 「LaravelでAPI認証と言ったらLaravel Passport!」といった記事や講演資料も多くあるので、それを参考にしてそのまま「first-party application」の「認証」に適用している開発者も実際に多くいるように思います。 こうじゃないと絶対いけないというのはないと思いますが、回答が少しでも参考になれば幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問