12

自分のGoogleドライブにいつでもアクセスしたり、そこでファイルを作成したり、共有したりできるアプリケーションを作りたいです。https://developers.google.com/drive/service-accounts 「通常のGoogleアカウントをアプリケーション所有のアカウントとして使用する」によると、必要なのはaccess_tokenとrefresh_tokenを一度取得し、それらをアプリケーションに保存して、refresh_tokenIを使用することだけです。私のaccess_tokenを(どういうわけか)更新することができます。

https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/drive.file&redirect_uri=http://localhost;response_type=のようなリクエストを使用してaccess_tokenを取得でき ますtoken&client_id =

ユーザーダイアログでこのアプリケーションリクエストを承認した後、ローカルホストにリダイレクトされ、3600秒で期限切れになるaccess_tokenを取得します。

質問は次のとおりです。

1. refresh_tokenを取得するにはどうすればよいですか?
2. refresh_tokenを使用してaccess_tokenを更新するにはどうすればよいですか?

グーグルのAPIクライアントライブラリはひどいので使いたくない(.NET)。

4

1 に答える 1

19

はい、分かりました。答えはここで見つけることができます:https ://developers.google.com/accounts/docs/OAuth2WebServer#offline

まず、認証リクエストを行う必要があります

    <form method="POST" action="https://accounts.google.com/o/oauth2/auth">
        <input type="hidden" name="scope" value="[YOUR SCOPE]"/>
        <input type="hidden" name="client_id" value="[YOUR CLIENT ID]"/>
        <input type="hidden" name="response_type" value="code"/>
        <input type="hidden" name="redirect_uri" value="[YOUR RETURN URL]"/>
        <input type="hidden" name="access_type" value="offline"/>
        <input type="submit"/>
    </form>

次に、return_urlに「コード」を取得します

次に、コードをaccess_tokenとrefresh_tokenに交換する必要があります

        <form method="POST" action="https://accounts.google.com/o/oauth2/token">
            <input type="text" name="code" value="[CODE YOU GOT IN PREV STEP]"/>
            <input type="hidden" name="client_id" value="[YOUR CLIENT ID]"/>
            <input type="hidden" name="client_secret" value="YOUR CLIENT SECRET"/>
            <input type="hidden" name="grant_type" value="authorization_code"/>
            <input type="hidden" name="redirect_uri" value="YOUR REDIRECT URL"/>
            <input type="submit"/>
        </form>

この結果、次のような応答を賭けることになります。

{
  "access_token" : "[HERE YOU ACCESS TOKEN]",
  "token_type" : "Bearer",
  "expires_in" : 3600,
  "id_token" : "eyJhbGciOiJSUzI1NiIsImtpZCI6ImRiMjBlNWMwZGU1YWI0MGRjNTU5ODBkM2EzYmZlNDdlOGM2NGM5YjAifQ.eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwiY2lkIjoiMjQ2ODg5NjU3NDg2LmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tIiwiYXVkIjoiMjQ2ODg5NjU3NDg2LmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tIiwidG9rZW5faGFzaCI6IjRURGtlQ0MzVWRPZHoyd2k1N2RnaUEiLCJpZCI6IjExNTI0MDk1NDM0Njg1NTU4NjE2MSIsImlhdCI6MTM1MzQwNDQ3MCwiZXhwIjoxMzUzNDA4MzcwfQ.Va98sh9LvMEIWxpRMFkcuFqtDAUfJLN5M__oJyjvmIxQR9q2NUIoocyjqbNyXc7as_ePQYiUjajx0SCumtR4Zhv-exeJfrKA_uMmJTe7jWhK6K2R3JQ2-aIZNnehpEuhYZBXgLhzYz1mlFrLqQTdV6LjDhRPDH-ol4UKWXfbAVE",
  "refresh_token" : "[HERE YOUR REFRESH TOKEN]"
}

これで、これらのトークンをアプリケーションに保存し、3600秒ごとにaccess_tokenを更新する無制限の時間を使用できます。

            <form method="POST" action="https://accounts.google.com/o/oauth2/token">
                <input type="text" name="refresh_token" value="[YOUR REFRESH TOKEN]"/>
                <input type="hidden" name="client_id" value="[YOUR CLIENT ID]"/>
                <input type="hidden" name="client_secret" value="[YOUR CLIENT SECRET]"/>
                <input type="hidden" name="grant_type" value="refresh_token"/>
                <input type="submit"/>
            </form>

そして、このリクエストを行うたびに、新しいaccess_tokenを取得します

{
  "access_token" : "[NEW ACCESS TOKEN]",
  "token_type" : "Bearer",
  "expires_in" : 3600,
  "id_token" : "eyJhbGciOiJSUzI1NiIsImtpZCI6ImRiMjBlNWMwZGU1YWI0MGRjNTU5ODBkM2EzYmZlNDdlOGM2NGM5YjAifQ.eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwiYXVkIjoiMjQ2ODg5NjU3NDg2LmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tIiwidG9rZW5faGFzaCI6ImpyYk5oNkRHZFN4Y0w5MUI5Q1hab2ciLCJpZCI6IjExNTI0MDk1NDM0Njg1NTU4NjE2MSIsImNpZCI6IjI0Njg4OTY1NzQ4Ni5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImlhdCI6MTM1MzQwNTU5OSwiZXhwIjoxMzUzNDA5NDk5fQ.mGN3EYOX75gPubr3TqWIOBkfq-o3JBXMXx4MbxEBGMSuPdJi7VTqZa4isyR-st-J5_wTtA-j8tVQYnDeZDxj5KpJ14FFQPKTtv_VI5kvuT55KyOmGu4yidciYoffJMISisr8NqiksbemaiYX900sRv6PmoTA6Nf6VtHgj3BZjWo"
}
于 2012-11-20T10:04:40.347 に答える