【Silverlight】 WCF RIA Servicesを使用して、ログイン認証を行うには

◆ ログイン検証 プロバイダー

using System;
using System.Web.Security;

namespace Web.Services.LoginService
{
    public class CustomMembershipProvider : MembershipProvider
    {
        // ログイン検証
        public override bool ValidateUser(string username, string password)
        {
            // 今回は、ユーザー名とパスワードが一致したら認証OKとする。
            return (username.Equals(password));                
        }

        public override MembershipUser GetUser
            (string username, bool userIsOnline)
        {
            throw new NotImplementedException();
        }

        // 今回、以下 override は同様にNotImplementedException を実装
        // ・・・
    }
}

◆ ロール設定 プロバイダー

using System;
using System.Web.Security;

namespace Web.Services.LoginService
{
    public class CustomRoleProvider : RoleProvider
    {
        // ユーザーに対するロールを設定
        public override string[] GetRolesForUser(string username)
        {
            // 今回は、ユーザー名が admin であれば管理者とする。
            if (username.Equals("admin") )
            {
                return new string[] { "Administrator" };
            }
            else
            {
                return new string[] { "Gest" };
            }
        }

        public override string[] FindUsersInRole
            (string roleName, string usernameToMatch)
        {
            throw new NotImplementedException();
        }
        
        // 今回、以下 override は同様にNotImplementedException を実装
        // ・・・
    }
}

◆ Web.config

<system.web>
    // ・・・省略    
    <!-- Form認証 -->
    <authentication mode="Forms" />
    <!-- プロバイダー情報 -->
    <membership defaultProvider="customProvider">
      <providers>
        <add name="customProvider" 
            type=" Web.Services.LoginService.CustomMembershipProvider" />
      </providers>
    </membership>
    <roleManager enabled="true" defaultProvider="customProvider">
      <providers>
        <add name="customProvider" 
            type=" Web.Services.LoginService.CustomRoleProvider"/>
      </providers>
    </roleManager>    
</system.web>
  

◆ ユーザー エンティティ

using System.ServiceModel.DomainServices.Server.ApplicationServices;

namespace Web.Services.LoginService
{
    public class CustomUser : UserBase
    {
        // プロパティを実装する。今回は未実装。
    }
}

◆ ログイン認証 WCF RIA Services

using System.ServiceModel.DomainServices.Hosting;
using System.ServiceModel.DomainServices.Server.ApplicationServices;

namespace Web.Services.LoginService
{
    [EnableClientAccess]
    public class LoginService : AuthenticationBase<CustomUser>
    {

    }
}

◆ Silverlight

// ログイン認証 WCF RIA Services の呼び出し
var context = new LoginContext();
context.Load(context.LoginQuery(loginId, password, true, null),
    result =>
    {
        if (result.HasError)
        {
            // ログイン エラー
            IsLogin = false;
        }
        else
        {
            // ログイン ユーザーを取得
            var user = result.Entities.FirstOrDefault();
            // user が null の場合は、認証NG
            IsLogin = (user == null ? false : true);
        }                    
    }, null);
    

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中