web-dev-qa-db-ja.com

OAuth=の「オフライン」アクセスとはどういう意味ですか?

OAuthサーバーによって許可されたオフラインアクセスに関して、「オフライン」という言葉はどういう意味ですか?

ユーザーがサードパーティのアプリケーションからログアウトした場合、またはユーザーがFacebookなどのOAuthリソースサーバーからログアウトした場合でも、リソースサーバーがユーザーに関するデータを返すことを意味しますかまたはGoogleまたはTwitter?

29
Water Cooler v2

オフラインアクセスはIMOとしては非常に悪い名前であり、RFCでOauthを覚えている限りでは、Googleでのみ使用されている用語だと思います。

Googleオフラインアクセスとは何ですか?

オフラインアクセスをリクエストすると、Google認証サーバーは更新トークンを返します。リフレッシュトークンを使用すると、ユーザーがいないときにアプリケーションの前にいるユーザーに代わってデータを要求することができます。

オフラインアクセスが必要なアプリの例:

GoogleアナリティクスデータをダウンロードしてすてきなPDFファイルにし、毎朝統計情報を電子メールで送信します。これを機能させるには、アプリケーションが必要です。 Googleアナリティクスデータにアクセスする権限がないため、許可を与えることができません。そのため、Super Awesomeアプリはオフラインアクセスを要求し、認証サーバーはその更新トークンで更新トークンを返します。必要なときにトークンを使用して、Google Analyticsデータを取得します。

オフラインアクセスを必要としないアプリの例

Googleドライブにファイルをアップロードできる、あまり優れていないアプリを試してみましょう。あまり優れていないアプリは、外出中にGoogleドライブアカウントにアクセスする必要はありません。オンラインのときにアクセスするだけです。そのため、理論的にはオフラインアクセスは必要ありません。しかし、実際には、更新トークンが取得されるため、再度許可を求める必要はありません。ここで名前が間違っていると思います。

ドキュメント stuff

リフレッシュトークンが認証コード交換に存在する場合、それを使用していつでも新しいアクセストークンを取得できます。これはオフラインアクセスと呼ばれます。これは、アプリケーションが新しいアクセストークンを取得するときにユーザーがブラウザにいる必要がないためです。

オフラインアクセスに関する真実

問題は、多くの場合、認証サーバーは、実際にそれを提供するものを要求する必要がなくても、更新トークンを返すということです。ユーザーがいないときにユーザーデータにアクセスする能力を提供します。ユーザーは、ユーザーがそこにいなくてもそこにアクセスできることを知りません。 (これはjavascriptライブラリのみで、PHPライブラリはRefreshTokenをあなたから隠しますが、そこにあります)

例:次の手順でこれをテストできます Google 3 legged Oauth flow

ただし、投稿するだけです

https://accounts.google.com/o/oauth2/token code = {AuthCode}&client_id = {ClientId} .apps.googleusercontent.com&client_secret = {ClientSecret}&redirect_uri = urn:ietf:wg: oauth:2.0:oob&grant_type = authorization_code

応答:

{
"access_token" : "ya29.1.AADtN_VSBMC2Ga2lhxsTKjVQ_ROco8VbD6h01aj4PcKHLm6qvHbNtn-_BIzXMw",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "1/J-3zPA8XR1o_cXebV9sDKn_f5MTqaFhKFxH-3PUPiJ4"
}

このユーザーデータへのオフラインアクセスができるようになりました。

34
DaImTo

安全メカニズムとして、OAuthフローが一定期間(Googleアクセストークンの場合は1時間)後に期限切れになる)によって返されるアクセストークンを設計します。これは、ユーザーのデータは、ユーザーが最近OAuthフロー、つまりオンラインになっている必要があります。オフラインアクセスを要求すると、新しいアクセストークンを生成するために使用できる更新トークンがアプリケーションに提供されます。データがOAuthフローを通過してからずっと経ってから、別名オフラインのとき。

ユーザーがいないときにアプリケーションの実行を継続する場合は、オフラインアクセスを取得する必要があります。たとえば、夜間のバッチプロセスがある場合、またはアプリケーションがプッシュ通知などの外部イベントに応答する場合です。ただし、ユーザーがアプリケーションをアクティブに使用しているときにのみユーザーデータにアクセスする場合は、オフラインアクセスの必要はありません。 n =アクセストークンが必要になるたびにOAuthフローを介してユーザーを送信します。アプリケーションへのアクセスを以前に許可した場合、認証ページはすぐに閉じられ、プロセスはほとんど見えなくなりますユーザー。

Google APIの場合、ユーザーに提示する認証URLにパラメーターaccess_type = offlineを含めることにより、オフラインアクセスをリクエストできます。 インストール済みアプリケーションフロー を使用すると、オフラインアクセス、つまり更新トークンが自動的に要求されます。

7
Eric Koleda