GoogleのOAuth認証で取得したアクセストークンをC#で検証する方法


はじめに

以下の記事で、Angular な SPA で Google の OAuth 認証を行いました。

www.aruse.net

実際には、この時取得したアクセストークンをサーバーサイドに送信して、検証を行わないといけません。

ネットで調べた限りでは、セキュリティに配慮しているサイトほど、「必ず」アクセストークンの検証をすべきとなっていました。

この記事では、Google の OAuth 認証で取得したアクセストークンを検証する方法をご紹介します。

なお、環境は以下のようになります。

  • Windows 10
  • Visual Studio Community 2017
  • .NET Core 2.1
  • コンソールアプリケーション

Visual Studio の設定

Visual Studio で、.NET Core のコンソールアプリケーションテンプレートより、コンソールアプリケーションのプロジェクトを作成します。

そして、アクセストークンの検証をするためにGoogle.Apis.Authというライブラリを NuGet よりインストールします。

www.nuget.org

これで準備完了です。

サンプルソース

アクセストークンの検証はかなり複雑なのですが、Google.Apis.Authを使用すると簡単に検証を行うことができます。

ソースコードを確認しましたが、検証エラー時は例外が発生するようなのでそのような実装にする必要があります。

using System;
using System.Threading.Tasks;
using Google.Apis.Auth;
using Google.Apis.Auth.OAuth2;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            string id_token = "Set Access Token";

            Task task =  ValidateTokenAsync(id_token);
            task.Wait();

            Console.ReadKey();
        }

        static private async Task ValidateTokenAsync(string id_token)
        {
            
            try { 
                var validPayload = await GoogleJsonWebSignature.ValidateAsync(id_token);

                Console.WriteLine("Token is valid !!");
                return;

            } catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.WriteLine("Token is invalid !!");
        }
    }
}

参考サイト