ASP.NET Core 2系で Bearer トークン認証を行う

この記事は Microsoft Student Partners Japan アドベントカレンダーの12日目の記事です。


はじめに

ASP.NET Core のプロジェクトをアカウント認証付きで作成すると、Cookie認証によってWebページでの認証が行われるようになります。

Ajax通信なども、このCookieを勝手に使ってくれるので特に気にする必要はないのですが、モバイルアプリから接続するようなとき、APIを叩くための認証ではCookie認証よりToken認証の方が適しています。

今回は、ASP.NET Core 2系での Bearer Token 認証の方法について書いていきます。

パッケージのインストール

今回は、OpenIddict というライブラリを使用して実装をしていきます。

まず、このライブラリは Nuget.org 上ではなく、myget.org の方でダウンロードが可能になっているので、パッケージソースを追加します。

パッケージソースの追加

環境によって方法は違いますが、WindowsのVisualStudioでは、NuGet パッケージマネージャーの右上にある歯車アイコンを選択し、パッケージソースの一覧画面に移動します。

+アイコンで新しいソースを作成し、以下の内容に書き換えます

パッケージの追加

ソースを追加したら、以下の4つのパッケージを追加します

コードの追加

次は実際にコードを書いていきます。

コアな部分

Startup.cs の ConfigureServices  メソッド内部を以下のように変えていきます。

これでエンドポイントの作成まで完了です。

クライアント登録

次に、Bearer認証に対応するアプリケーションの登録を行います。

初期データの投入と同じタイミングで行うので、 Program.cs  の Main  メソッドに記述していきます。

ClientId や  ClientSecret らへんは適当に入れ替えて下さい。

コントローラーを追加する

ここで追加するのは、Bearerトークンで認証されているアクセスのみアクセス可能にするコントローラーです。

CookieでもBearerでも両方可能にする方法はまだ見つかっていません。。。

こんな感じに、Authorizeアトリビュートにオプションを渡すだけです。

データベースの更新

最後に、OpenIddictで追加されるモデルを使用できるようにマイグレーションをかけます。

クライアント側から使う

残りは普通のBearer認証と同じでできます。

自分はJavaから使用しましたが、こんな感じでフルスクラッチでかけます。

サンプル

一通り実装したサンプルをこちらに置いておきます。

https://github.com/r-ralph/BearerTokenTestApplication