Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

「ASP.NET Identity」の登場背景と実際の使い方

ASP.NET Identity入門 第1回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2014/04/18 14:00

 昨年10月にリリースされたVisual Studio 2013の登場とともに、ASP.NETにもさまざまな機能が追加されました。その中の一つが新しい認証、資格管理システムである「ASP.NET Identity」です。本連載ではこの「ASP.NET Identity」を取り上げ、どんなものであるか、どのように使うのか、どんな仕組みで動いているのかを紹介していきます。連載初回の今回は、ASP.NET Identityとは何かについてお話します。その後、Visual Studio 2013に組み込まれたテンプレートを用いてプログラムを作成し、実際に動作を確かめてみましょう。

目次

ASP.NET Identityとは何か

 Visual Studio 2013(以降、VS2013)のリリース時、「One ASP.NET(*1)」のもとにASP.NETにも数多くの新機能が追加されました。今回紹介する「ASP.NET Identity」もその一つで、これまでのものとは別に一から設計された新たな認証、資格管理システムです。

 でも、どうして新しいものを作る必要があったのでしょうか。この疑問に答えるために、これまでのASP.NETでの認証、資格管理システムについて、順に振り返っていきましょう。

*1)One ASP.NET

 ASP.NETに含まれるWebフォーム、MVC、Web API、SignalRといったさまざまなフレームワークを、柔軟に組み合わせてWebアプリケーションを作成できるよう、ライブラリやテンプレートを見直そうというビジョンのことです。詳しくは次のblogエントリを参照してください。
 

ASP.NET誕生(ASP.NET 1.0~)

 2002年にASP.NETが誕生したときはASP.NETの認証、資格管理システムには、フォーム認証をベースとしたAPIが用意されました。しかし、資格情報を入力する画面や、認証、承認処理の多くを自前で実装する必要がありました。また、ユーザーの資格情報を保管するには、独自にSQL Serverなどのデータベースやテキストファイル、XMLファイルを用意して管理する必要がありました(図1)。

図1:ASP.NET 1.0のサポート範囲
図1:ASP.NET 1.0のサポート範囲

ASP.NETメンバーシップ登場(ASP.NET 2.0~)

 そこで、2005年にリリースされたASP.NET 2.0では、資格情報を入力し、認証、承認を行うための各種ログインコントロールに加え、資格情報データストアを自動生成し、そのアクセスを行うためのAPIを提供する「ASP.NETメンバーシップ」が登場しました(図2)。ログインコントロールとASP.NETメンバーシップを使うことで、ユーザーの作成、削除などの管理を行う専用ページ、および管理情報を保管するデータベース、さらに認証、資格情報の取得まで、ほとんどコードを書くことなく実現できるようになりました。

図2:ログインコントロール、ASP.NETメンバーシップのサポート範囲
図2:ログインコントロール、ASP.NETメンバーシップのサポート範囲

 しかし、大きな力には代償が伴うものです。ASP.NETメンバーシップは確かに手軽なのですが、次のような問題がありました。

資格情報のデータベーススキーマはSQL Server限定

 SQL Server以外のデータベースを使用するには、サードパーティ製の「メンバーシッププロバイダー」を使うか、自作する必要があります。

資格情報をカスタマイズすると、管理が大変になる

 資格情報に「誕生日」といった独自の情報を追加することは可能です。しかし、基本となるユーザー名などの資格情報とは別のテーブルに追加されてしまうため、メンテナンスが難しくなってしまいます。

リレーショナルデータベースを前提としている

 ASP.NETメンバーシップの各機能を提供する「メンバーシッププロバイダー」を自作すれば、SQL Server以外に資格情報を保管することはできます。しかし、あくまでその仕組みはリレーショナルデータベースを前提としています。そのため、キーバリューストア(KVS)のようないわゆる"NoSQL"を相手に実装すると、明示的に「未実装」としてNotSupportExceptionをスローするように実装しなければならないメンバーが大量にあり、直観的とはいえません。

ユニットテストが難しい

 近年の開発では、ユニットテストを始めとしたコードによる自動化テストが当たり前となってきています。しかし、ASP.NETメンバーシップが生まれた時代はそうではありませんでした。そのため、ASP.NETメンバーシップはスタブ、モックなどを利用したユニットテストがしやすい構造にはなっていません。

ソーシャルログイン未対応

 近年のSNSの隆盛により、Facebook、Google、Twitterといった外部のソーシャルアカウントを認証に使いたいというケースも増えています。しかし、ASP.NETメンバーシップでは、これを実現するのは容易ではありません。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 高野 将(タカノ ショウ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2012年2月時点での登録メンバは37名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:ASP.NET Identity入門

もっと読む

おすすめ記事

All contents copyright © 2006-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5