最近の Webアプリケーション であれば ユーザー認証 を必要とするサイトが普通かと思います。
ユーザー認証の仕組みを作るのと同じように必要となるのがコンテンツに対するアクセス制御です。
ここでは コンテンツに対するアクセス制御 の具体的な実装例をまとめます。
目次
概要
web.config で 制御する 方法
属性 で 制御する 方法
概要
ユーザー認証が終わると、続いてコンテンツにアクセスして良いかどうかの判断(承認)が行われます。
以下では承認の方法別メリット・デメリットおよび一般的な実装概念について述べます。
手法別メリット・デメリット
具体的なアクセス制御方法ですが、ASP.NET の 承認制御 は 「web.config を用いた方法」 と 「ソースコードに属性として記述する方法」 の2パターンがあります。
それぞれのメ ...
ラベル MVC の投稿を表示しています。 すべての投稿を表示
空のプロジェクト から 始める ASP.NET MVC 5
ASP.NET MVC 5 の 入門ともいえる、もっとも簡単な チュートリアル を作ってみました。
空のプロジェクト からだと単純にはいかなかったので、そのメモも兼ねています。
よくみるサンプルコードやチュートリアル、入門などでは ViewBag や ViewDagta を使ってますが、実際はモデルを渡して利用した方が都合が良いと思うので、ここではちょっと実践よりにチュートリアルを構成してみました。
サンプルコード
サンプルコード の ダウンロード
目次
目標
前提条件
チュートリアル
ソリューション、プロジェクトの準備
モデルの作成
コントロールの作成
ビューの作成
実行、確認
目標
よくある "Hello World !" を表示する Webア ...
Akinari Tsugo
16:36
ASP.NET,
C#,
MVC
CS0234 エラー の 原因 と その 修正方法
Visual Studio 2013 で ASP.NET アプリ を 作成していて、次のようなエラーに遭遇したときの対処方法です。
エラーメッセージ 例
CS0234: 型または名前空間名 'Ajax' は名前空間 'System.Web.Mvc' に存在しません。アセンブリ参照が不足しています。
原因
dll参照 がおかしい状態になっています。
具体的には ASP.NET 5.0 が プロジェクト に インストール されていない状態で実行しようとしています。
対策
単純に以下の手順で ASP.NET 5.0 を プロジェクト に追加します。
[ツール]-[NuGet パッケージ マネージャー]-[ソリューションの NuGet パッケージの管理...] を選択
「NuGet パッケージの管理」において、[オンライン]-[すべて] を選 ...
Akinari Tsugo
0:20
ASP.NET,
C#,
MVC
ASP.NET MVC で CSRF 対策
Webアプリケーションを開発するとよく見かける脆弱性に CSRF (Cross-Site Request Forgery、クロスサイトリクエストフォージェリ) があります。
簡単には「ユーザーが予期しない処理を実行させようとする攻撃」といったところでしょうか。
その対策の1つに「正規の操作が行われていることを示すトークンを記述、検証する方法」があります。
ここでは、CSRFの詳細は記載せず、 ASP.NET MVC において、トークンを用いた CSRF対策 を実装する実例をまとめてみました。
目次
注意すべき処理
CSRF対策 で利用する クラス、メソッド
CSRF対策 の 実装例
CSRF対策 ができているか テスト
注意すべき処理
基本的に読み取り、表示以外は CSRF の危険性がないか注意すべき処理だと思います。
注意すべき処理
...
Akinari Tsugo
0:02
ASP.NET,
C#,
IIS,
MVC,
セキュリティ
ASP.NET で 認証 に 関する オブジェクト の関係
ASP.NET で認証に関する オブジェクト をクラス図に書き出してみました。
後半では、認証に関するオブジェクトのちょっとした使い方を記載しています。
目次
認証に関するオブジェクトのクラス図
認証されたかどうかを検出する
認証されたことを登録する
Akinari Tsugo
23:33
ASP.NET,
C#,
IIS,
MVC,
WCF,
Web API
ASP.NET + StyleCop で発生する警告の回避方法
ASP.NET + StyleCop で発生する SA1633 の警告をルールを切らずに回避する方法。
原因は、Debug または Release フォルダ配下に自動生成される TemporaryGeneratedFile_<GUID>.cs ファイルです。
このファイルは空ファイルなので、ヘッダーがないと怒られてしまいます。
該当するファイルを静的解析の対象から外すことで回避します。
具体的には、以下に示すように設定ファイルへ追記します。
Settings.StyleCop
<StyleCopSettings Version="105">
<Parsers>
<Parser ParserId="StyleCop.CSharp.CsParser">
<ParserSettings>
<CollectionProperty N ...
Akinari Tsugo
21:12
ASP.NET,
C#,
MVC
ASP.NET の IHttpModule の 実装 と 利用
ASP.NET アプリケーション に対して モジュール化 された複雑な機能、処理を提供したい場合、 IHttpModule を利用すると便利です。
例えば、複数に分散してしまったアプリケーションに対して、ある決まった認証処理を実装させたいとき、簡単に機能を提供することが可能になります。
ここでは、認証されていないユーザーがアクセスしてきたとき、別のサイトへ転送させる機能を提供する HttpModule を作成します。
目次
概要
IHttpModule の 実装
IHttpModule の 利用
Akinari Tsugo
19:04
ASP.NET,
C#,
MVC,
WCF,
Web API
IIS に ASP.NET がうまく構成されていない問題 の 対策
環境を再構築したりしていると見かけるエラーです。
最近は環境再構築をよくしているのでよく見かけており、慣れてきましたが…
念のため、エラー例とその原因、対策を記載します。
目次
エラー例
原因
対策
Akinari Tsugo
23:42
ASP.NET,
C#,
IIS,
MVC
ASP.NET で 独自認証処理 を 実装 する 方法
フォーム認証でも、Windows認証でもなく、完全に独自の認証方法を行う場合、どのような実装を行うかのサンプルを掲載します。
シングルサインオン を実装するような ケース を想定した実装例です。
実装が web.config や Global.asax なので、ASP.NET MVC、WCF等で有効な実装方法になるハズです(試したのは ASP.NET MVC4 のみ)。
目次
概要
web.config の設定
Global.asax の実装
ソースコード
GitHub - garafu / samplecode_mockSSO
ダウンロード zip
Akinari Tsugo
1:53
ASP.NET,
C#,
MVC,
WCF
ASP.NET MVC の イベント 発生順序
ASP.NET MVC において、/Home/Index へアクセスした場合、発生するイベントの順序を調べてまとめました。
IIS へ アクセス した タイミング によって発生する イベント が異なるので、それぞれ分かるよう プルダウン を準備しました。
調査対象は HttpApplication (Global.asax) 、 IHttpModule 、 IAuthorizeFilter 、 IActionFilter 、 Controller 、 View (*.cshtml) です。
Akinari Tsugo
21:13
ASP.NET,
C#,
MVC
machineKey の 生成ツール
.tbl {
border-collapse: collapse;
}
.tbl th, .tbl td {
border: 1px solid #dddddd;
padding: 0.3em 0.8em;
}
.tbl th {
background-color: #f5f5f5;
}
.tablealg {
width: 12em;
}
.tabledata {
text-align: center;
}
ASP.NET で開発をしていると、 web.config に machineKey を設定できます。
複数のサーバーにおいて、同じ認証結果を利用したい場合(DNSラウンドロビン等)、各サーバーにおいて共通の machineKey を設定することで、1度の認証で他のサーバーにアクセスできるようなことを実現できます。
この machineKey 、 ...
Akinari Tsugo
18:29
ASP.NET,
C#,
MVC,
WCF,
Web API
ASP.NET MVC + Web API で フォーム認証 の実装
"技術的にできる" という実践例として MVC 4 + WebAPI という組み合わせで、 RESTful like なフォーム認証を作る方法を記載します。
MVC だけで実装する フォーム認証 と比べ、実装量が増える デメリット がありますが、操作感が良くなる(リクエスト時に固まるをなくせる)メリットはあると思います。
目次
概要
作成する ファイル、フォルダ 構成
web.config の認証設定
ログイン、ログアウト 処理
ログイン処理 への Ajaxリクエスト
ログイン後 の リダイレクト
Akinari Tsugo
22:46
ASP.NET,
C#,
MVC,
Web API
ASP.NET MVC で フォーム認証 の実装方法
ASP.NET MVC における、フォーム認証の実装例を掲載します。
今回は ASP.NET MVC 4 で実装しています…が、 ASP.NET MVC 3 でも似たような実装になるかと思います。
目次
概要
web.config の 設定
ログイン モデル の 作成
ログイン ビュー の 作成
ログイン 処理 の 実装
[おまけ] ログアウト
Akinari Tsugo
1:16
ASP.NET,
C#,
MVC
ASP.NET MVC で ページ遷移 を 記録する フィルター
ブラウザでどのようにページ遷移が行われたかを簡単に記録するためのフィルターを作成します。
このフィルターを利用することで「不適切なページ遷移を拒否できる」とか「ブラウザの戻る機能の無効化」
ができるようになることを目指します。
ソースコード
説明
使用例
ソースコード
閲覧履歴をセッションに残すフィルターを作成します。
ここでは Filters フォルダ & 名前空間を1つ掘って実装しています。
BrowsingHistoryAttribute.cs
namespace SampleMvcApplication.Filters
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
...
Akinari Tsugo
23:25
ASP.NET,
C#,
HTML,
MVC,
拡張
ASP.NET MVC で アプリケーション ルート URL の 取得
アプリケーションルートURL(ベースURL?基本URL?…どういう呼び方が正しいかよく分かりません。。) は IIS へホストされた状況によって変化します。
そのような状況でも確実に ルートURL を取得する方法です。
サンプルコード
var scheme = httpContext.Request.Url.Scheme;
var authority = httpContext.Request.Url.Authority;
var path = HttpRuntime.AppDomainAppVirtualPath;
// ルートURL の生成
var baseUrl = string.Format("{0}://{1}{2}", scheme, authority, path);
説明
Request.Url.Scheme では、http または https を取得 ...
Akinari Tsugo
23:20
ASP.NET,
C#,
MVC
ASP.NET MVC で コントローラー名、アクション名 の 取得
RouteData を利用して、リクエストされた コントローラー名 および アクション名 を取得する方法です。
コントローラー名、アクション名 を 取得する方法の基本
コントローラー内で取得するサンプルコード
ヘルパークラス内で取得するサンプルコード
カスタムフィルター内で取得するサンプルコード
コントローラー名、アクション名 を 取得する方法の基本
サンプルコード
var routeData = System.Web.Routing.RouteTable.Routes.GetRouteData(httpContext);
var controllerName = routeData.Values["controller"].ToString();
var actionName = routeData.Values["action"]. ...
Akinari Tsugo
23:19
ASP.NET,
C#,
MVC
ASP.NET MVC で カスタムフィルター の 実装方法
独自フィルター(カスタムフィルター)を作成、実装することで、各アクションに対して画一的な処理を "簡単に" 施すことができるようになります。
例えば「特定の条件を満たさない場合、実行できなくする」「ユーザーのページ遷移を記録する」「キャッシュを無効化する」といったことができるようになります。
この 独自フィルター の実装方法ですが、通常は FilterAttribute クラスを継承して作成します。
簡易的に 組込フィルタークラス を継承することでも 独自フィルター を作成できます。
※フィルター の 実行順序 は こちら をご参照ください。
以下では「キャッシュを無効化する独自フィルター」を実装する手順を見ていきます。
実装手順
独自フィルター を作成する プロジェクト を選択し、[プロジェクト]-[新しい項目の追加] を選択
任意の名前 ...
Akinari Tsugo
15:03
ASP.NET,
C#,
MVC,
マニュアル
ASP.NET MVC の フィルター 実行順序
.table {
border-collapse: collapse;
border: 1px solid silver;
}
.table th {
border: 1px solid silver;
background-color: #efefef;
padding: 0.3em 0.5em;
}
.table td {
border: 1px solid silver;
padding: 0.3em 0.5em;
}
.order {
text-align: center;
}
組込 アクションフィルター は、 FilterAttribute を継承しています。
また、どの クラス 、 インターフェース も System.Web.Mvc 名前空間に属しています。
※ 独自フィルターの実装方法は こちら ...
Akinari Tsugo
15:02
ASP.NET,
C#,
MVC
ASP.NET MVC3 で ブラウザ キャッシュ を 無効化 する アクションフィルター
特定の処理だけ キャッシュ を 無効化 したいけれど、いちいち、そんな処理を書いているのが面倒…
という思いから、お手軽に キャッシュ の 無効化 を実現する方法を作ってみました。
無効化する作業としては、以下のソースコードにある NoCacheAttribute をキャッシュさせたくない操作(メソッド)の属性に設定するだけです。
ソースコード
説明
使用例
ソースコード
キャッシュ を 無効化する 属性 NoCacheAttribute のサンプルコードを以下に記載します。
NoCacheAttribute.cs
namespace SampleMvcApplication.Controllers
{
using System;
using System.Collections.Generic;
using ...
Akinari Tsugo
23:43
ASP.NET,
C#,
HTML,
MVC,
キャッシュ,
拡張