1

私は、クライアントがコードとしてサーバーに送信したものからトークンを取得するために、Google API クライアントdotnet とチュートリアルからGoogleAuthorizationCodeFlowシナリオを実装しました。しかし、私が呼び出すと、次のエラーが発生します:flow.ExchangeCodeForTokenAsync

{"Error:\"invalid_grant\", Description:\"\", Uri:\"\""}

google dotnet api クライアント ライブラリを使用して google authentication invalid_grantとgusclass oauth 2 を読みましたが、役に立ちませんでした。とてもシンプルに違いないと思いますが、なぜうまくいかないのかわかりません。クライアント側では、 Satellizerを使用しました。これが私のサーバー コードです。

public bool PostExchangeAccessToken(GoogleClientAccessCode code)
        {
            string[] SCOPES = { "email" };
            IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
            {
                ClientSecrets = new ClientSecrets()
                {
                    ClientSecret = "******",
                    ClientId = "********.apps.googleusercontent.com"
                },
                Scopes = SCOPES
            });
            try
            {
                TokenResponse token;
                token = flow.ExchangeCodeForTokenAsync("*****@gmail.com", Newtonsoft.Json.JsonConvert.SerializeObject(code), "https://localhost:44301/",
                                CancellationToken.None).Result;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return true;
        }

何が問題ですか?

4

2 に答える 2

1

Githubで、クライアントから を使用して使用する必要があることがわかりましToken

GoogleAuthorizationCodeFlow.Initializer() 

UserCredential オブジェクトを作成します。

于 2016-07-02T11:12:41.267 に答える
0

Google 開発者コンソールの設定を確認できます。(認可されたリダイレクト URI)

資格情報 => OAuth 2.0 クライアント ID => アプリケーション設定 => 承認済みのリダイレクト URI

URL を追加する必要があります。(" https://localhost:44301/ ")

私のコード:

 flow.ExchangeCodeForTokenAsync("me", authCode, redirectUri, CancellationToken.None).Result;

認可されたリダイレクト URI

Web サーバーからの要求で使用します。これは、ユーザーが Google で認証された後にリダイレクトされるアプリケーション内のパスです。パスには、アクセス用の認証コードが追加されます。プロトコルが必要です。URL フラグメントまたは相対パスを含めることはできません。パブリック IP アドレスにすることはできません。

于 2016-06-06T09:15:40.910 に答える