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

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

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

OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

App Store

App Storeは、Apple社が運営する、iPhone、iPod touch、iPad向けアプリケーションソフトのダウンロードサービスです。携帯電話、Wi-Fiによる無線通信に対応しており、多くのアプリケーションをダウンロード、インストールすることができます。世界中の開発者によってアプリケーションが登録されており、有償のソフトもあればフリーソフトも多く登録されています。

Q&A

解決済

2回答

1106閲覧

OAuthの作法、マナー、「アクセストークン」の扱いについて

CUTBOSS

総合スコア7

OAuth

OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

App Store

App Storeは、Apple社が運営する、iPhone、iPod touch、iPad向けアプリケーションソフトのダウンロードサービスです。携帯電話、Wi-Fiによる無線通信に対応しており、多くのアプリケーションをダウンロード、インストールすることができます。世界中の開発者によってアプリケーションが登録されており、有償のソフトもあればフリーソフトも多く登録されています。

0グッド

2クリップ

投稿2018/05/10 22:27

OAuthについて、こちらの記事「一番分かりやすい OAuth の説明」が大変に分かりやすかったのですが、「アクセストークン」は、「クライアントアプリケーション」に渡されていました。

これは当然のことだと思いますが、その後、「クライアントアプリケーション」から「全く関係のない別のアプリ」「全く関係のない別のサーバー」へ「アクセストークン」を渡すことが可能で、そこに物理的な制限はないと思いました。

OAuthの思想からすると、これはやるべきではない、やってはいけない、ことのように感じたのですが、実態はどうなのでしょうか?

これは取り締まれるのでしょうか、マナーの問題なのでしょうか?

例えば、Androidアプリ上でアカウント認証して、「アクセストークン」をAndroidアプリは得たとします。

この「アクセストークン」を外部サーバへネットワーク経由で渡してしまえば、そのサーバ上でさも認証したかのように、「Google Drive」から自由に情報を取得することが可能だと思います。

同様に、Androidアプリから、別のAndroidアプリへ共有データとして「アクセストークン」を渡してしまうことも可能で、別のAndroidアプリが「Google Drive」から自由に情報を取得することも可能だと思います。

しかも、そうしていることが、ユーザには分からないようにできるのではないでしょうか。

素朴に、これは「スパイウェア」もどきに感じてしまったのですが、「悪いことしないから」という前提でこういうことやっているサービス、予想ですが、結構、存在しないでしょうか?

例えばこんなアプリをGoogleやAppleにリリースしたら、許されるのでしょうか?

今回、「REST API」を改めて考えてみて、素朴に、疑問に思いました。「アクセストークン」が漏れたら何でもできてしまう。「Google Drive」にアクセスする巷のアプリを何も考えずに使っていますが、実は凄く怖いことなんじゃないかって。Googleはちゃんとそういったことを審査できているのかって。

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

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

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

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

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

guest

回答2

0

ベストアンサー

「一番分かりやすい OAuth の説明」を書いた本人です。

ご懸念の通り、アクセストークンを他のところに持っていけば、使えてしまいます。これは電車の切符に似ていて、自分が買った切符を不注意で落としてしまい、その切符を他の誰かが拾ったとすると、その他人がその切符を使って電車に乗れてしまうのと同じことです。

一方、国際線の航空券では、航空券を拾っただけでは、他人は飛行機に乗れません。なぜなら、航空券を使用する際、パスポート番号や顔写真の照合などがおこなわれ、その航空券を使用する権利を持つ本人かどうかの確認が行われるからです。

この、国際線の航空券の概念をアクセストークンにも持たせるための仕様の一つとして、『OAuth 2.0 Mutual TLS Client Authentication and Certificate Bound Access Tokens』というものが存在します。まだドラフト段階 (draft-ietf-oauth-mtls) ではありますが、その内容は stable です。この仕様を実装した認可サーバーは既に幾つか存在します。まだ公開していませんが、私の会社の製品 Authlete でも、社内開発ブランチでは実装済みです。この、Mutual TLS の仕様のほかに、Token Binding という仕様も存在します。

Mutual TLS や Token Binding を用いれば、単純にアクセストークンを他の場所に持っていっただけでは利用できなくなるので、よりセキュアになります。

投稿2018/06/08 17:06

darutk

総合スコア30

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

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

CUTBOSS

2018/06/12 10:10

そういうことが知りたかったです。 「一番分かりやすい OAuth の説明」も併せて、大変ありがとうございました。
guest

0

上の説明では省略していますが、実際のOAuthにおいては、各クライアントごとにClient Secretという鍵があって、アクセストークンはそれとセットでないと使えません。

Client Secret自体をばらまくようなアプリがあれば、プラットフォーム側、あるいは鍵を無断流用された開発者から、キーを停止されることでしょう。

投稿2018/05/10 22:48

maisumakun

総合スコア145064

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

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

CUTBOSS

2018/05/10 23:00

例えば「アプリ+サーバ」という構成のサービスを提供している会社があるとします。 アプリ側でFacebookやGoogleなどのアカウントを認証しアクセストークンを取得しているとします。 このアクセストークンとClient Secretをサーバに渡して運用しているような場合、 これはアウトなのでしょうか。 同じサービス内だからOKという扱いになるでしょうか。
num79kill

2018/05/10 23:19

アウトかどうかの判定は提供元にしてください。 そこらへんは日々変動します
CUTBOSS

2018/05/10 23:21

そういうことですか。 お二方とも、ありがとうございました。
darutk

2018/06/08 17:12

アクセストークン利用時、Client Secret を併せて提示する必要はありません。Client Secret が使われるのは、Client Type (RFC 6749, 2.1) が Confidential のクライアントアプリケーションが、トークンエンドポイント (RFC 6749, 3.2) にアクセスするときのみです。さらに厳密に言えば、クライアント認証方式が client_secret_basic もしくは client_secret_post (OpenID Connect Core 1.0, 9) の場合のみです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問