1

私は .NET 用の MirrorQuickStart プロジェクトを使用していますが、更新トークンで問題が発生しています。私が知る限り、タイムライン サブスクリプションの更新で「通知」アクションが発生した場合、それは使用されていません。

適切な ID と構成情報を更新することを除いて、アプリを開発サーバーに公開すると、基本的にはそのままで、「通知」アクションは最初の 1 時間以内に機能しますが、その後、Web ページを更新して再起動するまで応答を停止します。 -認証する。

データベース サーバーの StoredCredentials テーブルを確認したところ、UserId、AccessToken、および RefreshToken の値が入力されています。また、標準のアプリ フローで新しいミラー サービスを作成しました (通知フローをデバッグし、発生している実際のエラー メッセージを確認する方法がわからないため)。そのたびに、サービスに AccessToken と RefreshToken が表示されます。

MirrorService service = new MirrorService(new BaseClientService.Initializer
{
     Authenticator = Utils.GetAuthenticatorFromState(
             Utils.GetStoredCredentials(userId))
});

Drive の DrEdit プロジェクトを確認しましたが、フローはGEtAuthenticatorFromStateGetStoredCredentialsメソッドに関しては基本的に同じようです。

この質問は、私が直面している問題に最も直接的に関連しているように見えましたが、ミラー プロジェクトに関しては、その答えは意味がありませんでした。

.NET で Google ドライブ SDK を介してリフレッシュ トークンを使用してアクセス トークンを生成するにはどうすればよいですか?

私が見逃している単純なものがあるはずです-私はOAuthフローにかなり慣れていないのでわかりません。

ありがとうございました。

4

1 に答える 1

1

リンクした他のSO回答から、これは次の問題を解決するようですModel/Utils.cs

        /// <summary>
        /// Returns the IAuthorizationState stored in the StoredStateClient instance.
        /// </summary>
        /// <param name="provider">OAuth2 client.</param>
        /// <returns>The stored authorization state.</returns>
        static public IAuthorizationState GetState(StoredStateClient provider)
        {
            provider.RefreshToken(provider.State);
            return provider.State;
        }

追加された行に注目してください: provider.RefreshToken(provider.State). RefreshTokenこれはライブラリによって自動的に行われる必要があるため、 への呼び出しが必要な理由はまだ不明です...

于 2013-06-24T21:01:09.177 に答える