2013年12月01日
川俣晶の縁側ソフトウェア技術雑記total 9007 count

No More SQL! ASP.NETの今どきのユーザー管理情報(UserStore)をAzureのテーブルに格納する方法

Written By: 川俣 晶連絡先

「単なるメモだ。今どきのASP.NETではユーザー管理機能を自動生成できる。自前で管理したIDパスワードも使用できるほか、OAuthでGoogleのIDでもログインできる優れものだ」

「昔と違うのだね」

「昔のユーザープロバイダーとは違うものだ」

「問題は何?」

「SQL Serverを要求されることだ」

「ユーザー情報だけなら無料のエディションでやりくりできる範囲だろ?」

「ところがね。Azureという前提を持つと、クラウドのSQLは別料金で使うとすぐ料金が跳ね上がるのだ」

「分かった。僅かなサイズのユーザー情報で、余計なお金は払いたくないわけだね」

「そうだ。そもそもCloud4のユーザー管理はSQL使ってないわけだし。機能低下はしたくない」

「では、Azureのストレージを使ったユーザー情報管理機能は提供されないわけ?」

「デフォルトでは提供されない」

「世の中には存在しないわけ?」

「以下のページにサンプルソースが存在する。動作を確認した」

「ここに掲載されているソースを使えばいいわけだね」

「残念ながらソースを差し替えて、クラス名を入れ換える程度では上手く行かない」

usingの問題 §

「このサンプルソース、実はusing文を含んでいない。間違ったusing文を追加すると上手く機能しない」

「なんで?」

「古いAzureストレージAPIを使うと、クラス名は同じなのにメンバーが無いという問題が起きたりする。そして、古いAPIも互換のために残っている」

「何を使えばいいの?」

「うちで動いているソースのusing文を載せるよ」

  • using System;
  • using System.Collections.Generic;
  • using System.Linq;
  • using System.Threading.Tasks;
  • using System.Security.Claims;
  • using Microsoft.AspNet.Identity;
  • using Microsoft.WindowsAzure.Storage;
  • using Microsoft.WindowsAzure.Storage.Table;

OAuth関係の問題 §

「これを使うとOAuth関係が上手く機能しないようなので、関連コードはコメントアウトだ。以下は動いているStartup.Auth.csの内容だ」

using System;

using System.Collections.Generic;

using System.Linq;

using Microsoft.AspNet.Identity;

using Microsoft.AspNet.Identity.EntityFramework;

using Microsoft.Owin;

using Microsoft.Owin.Security.Cookies;

using Microsoft.Owin.Security.OAuth;

using Owin;

using WebRole1.Providers;

using WebRole1.Util;

namespace WebRole1

{

    public partial class Startup

    {

        static Startup()

        {

            PublicClientId = "self";

            //UserManagerFactory = () => new UserManager<IdentityUser>(new MyCloudUserStore());

            //OAuthOptions = new OAuthAuthorizationServerOptions

            //{

            //    TokenEndpointPath = new PathString("/Token"),

            //    Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory),

            //    AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),

            //    AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),

            //    AllowInsecureHttp = true

            //};

        }

        public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; }

        public static Func<UserManager<IdentityUser>> UserManagerFactory { get; set; }

        public static string PublicClientId { get; private set; }

        //認証設定の詳細については、http://go.microsoft.com/fwlink/?LinkId=301864 を参照してください

        public void ConfigureAuth(IAppBuilder app)

        {

            // Enable the application to use a cookie to store information for the signed in user

            // and to use a cookie to temporarily store information about a user logging in with a third party login provider

            app.UseCookieAuthentication(new CookieAuthenticationOptions

            {

                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,

                LoginPath = new PathString("/Account2/Login")

            });

            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

            // アプリケーションがベアラ トークンを使用してユーザーを認証できるようにします

            //app.UseOAuthBearerTokens(OAuthOptions);

            // 次の行のコメントを解除して、サード パーティのログイン プロバイダーを使用したログインを有効にします

            //app.UseMicrosoftAccountAuthentication(

            //    clientId: "",

            //    clientSecret: "");

            //app.UseTwitterAuthentication(

            //    consumerKey: "",

            //    consumerSecret: "");

            //app.UseFacebookAuthentication(

            //    appId: "",

            //    appSecret: "");

            //app.UseGoogleAuthentication();

        }

    }

}

「これじゃ、Microsoft IDでもTwitterIDでもFacebookIDでもGoogleIDでも使えないじゃないか」

「そのあたりに対応するなら、根本的にコードを見直す必要がありそうだ」

2013/12/09追記 §

「上のソースがバグっていたので訂正を入れておいた」

「えっ? ログインできたよ?」

「ログインに成功した後の情報をクッキーに入れていなかったので、次のページで非ログイン状態に戻っていたのだ」

「ひぇ~」

Facebook

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2013年
12月
27日
Microsoft Virtual Academyで勉強ができるか?
3days 0 count
total 6659 count
【技術雑記】の前のコンテンツ
2013年
11月
28日
Windows StoreアプリでApplicationData.Current.LocalFolderにあるファイルを読み込むためのURI
3days 0 count
total 7940 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20131201165634
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.