1

クライアント資格情報の付与は更新トークンを返しません (DotNetOpenAuth.OAuth2.AuthorizationServer.PrepareAccessTokenRequest はそれを禁止します)。ただし、 ClientBase.AuthorizeRequest にはそれが必要です。これは DotNetOpenAuth のバグですか、それとも何か間違っていますか?

ClientBase を継承して AuthorizeRequest をオーバーライドすることで回避できると思います。それは正しいことですか?

編集:必要なものの多くは内部のみであるため、DotNetOpenAuth の外部で ClientBase から継承するのはそれほど簡単ではありません。例: ErrorUtilities.VerifyProtocol

Edit2: DotNetOpenAuth.OAuth2.AuthorizationServer.PrepareAccessTokenRequest で参照されているドラフト OAuth 2 仕様 (ドラフト 25) を読むだけで、クライアント資格情報の付与タイプの更新トークンが許可されていない場所が見つかりません。多分彼らはそれを変えましたか?

4

2 に答える 2

3

要求すると、Google はリフレッシュ トークンを返します。クエリ文字列 access_type=offline にパラメーターを指定します。

私の場合、デフォルトの認証エンドポイント URL をhttps://accounts.google.com/o/oauth2/auth?access_type=offlineに修正する必要がありました。

DotNetOpenAuthを使用した Google API C# の例:

    private WebServerClient GetClient()
    {
        return new WebServerClient(
            new AuthorizationServerDescription
            {
                AuthorizationEndpoint = new Uri("https://accounts.google.com/o/oauth2/auth?access_type=offline"),
                TokenEndpoint = new Uri("https://accounts.google.com/o/oauth2/token"),
                ProtocolVersion = ProtocolVersion.V20,
            },
            clientIdentifier: this.settings.GoogleApisClientIdentifier,
            clientSecret: this.settings.GoogleApisClientSecret
            );
    }

私の経験からの注意: これは最初のリクエストでのみ機能します。

Google ドキュメントを参照してください。

于 2012-04-25T11:36:04.313 に答える
2

それが必要だと言う理由がわかりませんClientBase.AuthorizeRequest。まず、アクセス トークンのみを取得するオーバーロードがあるため、更新トークンを要求することさえありません。あなたが試したオーバーロードIAuthorizationStateは、リフレッシュ トークンを含む場合と含まない場合があるオブジェクトを受け入れます。そのメソッドは、アクセス トークンの有効期限が切れている場合にのみリフレッシュ トークンを検索するようです。期限切れのアクセス トークンは使用できないため、更新を試み、使用できない場合はスローします。私には理にかなっているように思えます。

どのメソッド オーバーロードを呼び出す場合でも、呼び出しモードは、期限切れのアクセス トークンを使用しないようにするか、DotNetOpenAuth またはリソース サーバーが期限切れまたは取り消されたと判断したときにスローされる例外に応答できるようにする必要があります。実際、トークンは有効期限が切れる前に取り消すことができるため、常に備えておくことをお勧めします。

実際、OAuth 2 仕様ドラフト 25 は、クライアント資格情報の付与への応答にリフレッシュ トークンを含めるべきではないことを示しています。セクション 4.4.3から:

4.4.3. アクセストークン応答

アクセス トークン リクエストが有効で承認されている場合、セクション 5.1 で説明されているように、承認サーバーはアクセス トークンを発行します。リフレッシュ トークンを含めることはできません。リクエストがクライアント認証に失敗したか、無効である場合、セクション 5.2 で説明されているように、認可サーバーはエラー応答を返します。

于 2012-04-07T05:35:54.780 に答える