Facebook OAuth2のaccess_tokenの長さは?


100

私の質問に対する回答を見つけるためにGoogleとStackOverflowで検索しましたが、回答が見つかりません。

オフラインアクセス用にデータベースにaccess_tokenを保存し、列の長さを正しく指定したいのですが。

それが単なる数字なのか、それとも数字と文字列の混合なのかさえわかりません。

回答:


128

私はFacebookで働いており、これについて明確な答えを出すことができます。

アクセストークンのストレージに最大サイズを設定しないでください。データを追加および削除したり、エンコード方法を変更したりすることで、時間の経過とともに拡大および縮小すると予想されます。

255文字になると一箇所で指導しました。その情報が含まれているブログ投稿を更新し、サイズに関するメモを含めるように新しいアクセストークンのドキュメントを更新しました。

https://developers.facebook.com/docs/facebook-login/access-tokens/

混乱させて申し訳ありません。


84
Facebookからの決定的な答えは、後で変更することです。
Dave Cohen

6
少なくともこの方法で変更を期待できるので、準備ができていません。
ZeeCoder 2013

現在300バイトのvarchar2に格納していて、今日は301〜305バイトのトークンで問題が発生し始めているため、制限がないことは少し苦痛です。代わりにCLOBを使用することを提案していますか?それとも、私たちが使用できるかなり大きなサイズはありますか?
Trampas Kirk 2014

次回誰かが「このフィールドにどの最大サイズを設定するべきか」と尋ねられたときのために、私は間違いなくその答えを保持します=>「最大サイズを設定しないでください、とにかく大きくなります」。本当に、大好きです!Facebookあなたは私の日を作りました;)
クリストフ・フォンダッチ

7
MySQLはこれに上限を必要とします。現実的な上限を与えてください。例:1000文字、10,000文字、1,000,000,000文字?上限がないというのは不合理です。
Yahya Uddin 2017

70

Facebookが最近暗号化されたアクセストークンに移行したことにより、アクセストークンの長さは最大255文字になる可能性があります。データベースにアクセストークンを格納する場合、列は少なくともvarchar(255)に対応できる必要があります。以下は、2011年10月4日のFacebookの開発者ブログからの抜粋です。

「暗号化アクセストークンの移行を有効にすると、アクセストークンの形式が変更されました。新しいアクセストークンの形式は完全に不透明であり、コード内の形式に依存することはできません。varchar(255)フィールドで十分です。新しいトークンを保管してください。」

ここに完全なブログ投稿:https : //developers.facebook.com/blog/post/572


2
更新された情報の+1。これは本当に受け入れられる答えになるはずです。
David Boike、

14
もう有効ではないようです。最近、256文字の長さのアクセストークンを受け取りました。
o_o

2
上記の@o_oと同じです。現在、255文字以上のトークンを含む240文字以上の長いトークンを取得しています。
Eric Redon、2013

それは奇妙です。サンプルの8000のうち、私が見た中で最も長いのは126文字です。
Johnny Oshika

1
最近、344文字のアクセストークンを確認しました。
o_o 2013

28

この答えは正しくなくなり、FBのドキュメントで正しい値を見つけることができません。255文字を超えるアクセストークンを受け取っています。VARCHARからSMALLTEXTに移行し、将来を見据えたものにしようとしています。


はい、本番アプリで284文字を取得したため、列がvarchar(255)であるためにデータベースエラーが発生しました...
松倉由紀2015年

同じ。257を取得しました
Louis Tsai 2017年

1
SMALLTEXTまたはMEDIUMTEXT?また、以前はaccess_tokenを制限していたのでVARCHAR(255)、今日はその影響を処理します。
NobleUplift

9

The OAuth 2.0 Authorization Protocoldraft-ietf-oauth-v2-22)のセクション1.4から

アクセストークンは、リソースサーバーのセキュリティ要件に基づいて、さまざまな形式、構造、および使用方法(暗号化プロパティなど)を持つことができます。保護されたリソースへのアクセスに使用されるアクセストークン属性とメソッドは、この仕様の範囲を超えており、コンパニオン仕様によって定義されています。

「コンパニオン仕様」を探しましたが、関連するものは見つかりませんでした。セクション11.2.2に、

oパラメーター名:access_token
oパラメーターの使用場所:承認応答、トークン応答
o変更コントローラー:IETF
o仕様書:[[this document]]

これは、access_tokenパラメータがこの仕様内で定義されていることを示しているようです。これはパラメータだと思いますが、実際のアクセストークンは完全には具体化されていません。

更新:仕様のこの執筆の最新バージョン(draft-ietf-oauth-v2-31)には、access_tokenパラメーターから何を期待するかをより適切に定義する付録が含まれています

A.12。「access_token」構文

The "access_token" element is defined in Section 4.2.2 and
Section 5.1:

  access-token = 1*VSCHAR

つまり、本質的にこれが意味することは、access_tokenは少なくとも1文字の長さでなければならないということですが、この仕様で定義されている長さに制限はありません。

VSCHAR =%x20-7Eを定義していることに注意してください


5

Facebookアクセストークンは255文字を超えることができます。ActiveRecord::StatementInvalid: PG::StringDataRightTruncation: ERROR: value too long for type character varying(255)値がfacebookアクセストークンである場合など、多くのエラーが発生しました。stringタイプカラムは長さに制限があるため、使用しないでください。texttype columnを使用してトークンを格納できます。


3

最近、アプリで100文字を超える文字が表示されています。私はまだドキュメントを探しているので、それらの「安全な」フィールドサイズを見つけることができます。


8
あなたが話すこの「文書」とは何ですか?:D
マーク

2

時間の経過から回答を更新します。

OAuth2ドキュメントから、

アクセストークンの文字列サイズは、この仕様では未定義のままです。クライアントは、値のサイズに関する仮定を行わないようにする必要があります。許可サーバーは、発行する値のサイズを文書化する必要があります。

このドキュメントのセクション4.2.2 )

注:このページで言及されているように、FacebookはOAuth2を使用しています

そのため、OAuthトークンの長さに関する情報は、Facebookの開発者向けポータルで入手できないようです。Yahooは400ビット長のトークンを使用しているようなので、MySQLのTEXTカラムはvarcharよりも安全であると想定するのが最善です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.