4

SQL Server dBに接続されたデフォルトのMembershipProvider、ProfileProvider、およびRoleProviderを使用してMVC3イントラネットアプリケーションを構築しています。フォーム認証を使用する場合、ロールプロバイダーは正しく入力されます。Windows認証に切り替えると、役割プロバイダーにデータが入力されなくなります。これは、コードにブレークポイントを設定し、「Roles.GetRolesForUser()」を確認することでテストされます。私が起こっているのは、データベースに渡されているユーザーIDが「DOMAIN \ USERID」(これはUser.Identity.Nameにあるもの)であるのに対し、データベースにあるのは単なるユーザーIDであるということです。

すべてがデフォルトであるため、投稿するコードはあまりありません。

<authentication mode="Windows" />
<authorization>
  <deny users="?"/>
</authorization>
  <membership defaultProvider="AspNetSqlMembershipProvider">
    <providers>
    <clear />
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
  </providers>
</membership>
<profile>
  <providers>
    <clear />
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
  </providers>
  <properties></properties>
</profile>
  <roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider" cacheRolesInCookie="true">
    <providers>
    <clear />
    <add connectionStringName="ApplicationServices" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" />
    <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" />
  </providers>
</roleManager>

私の最初の考えは、IDがメンバーシッププロバイダーに渡される前にドメインを削除することはできますが、User.Identity.Nameはgetのみです。

データベース全体を変更して、useridだけでなくdomain \ useridを使用することなく、これを修正するための最良の方法は何でしょうか。これは、カスタムメンバーシップ/プロファイル/ロールプロバイダーを作成せずに実行できますか?

4

1 に答える 1

1

Windows 認証のみを使用する場合は、SqlRoleProvider を使用するのではなく、AD ロールを返す WindowsTokenRoleProvider を使用する必要があります。(メンバーシップ プロバイダーを使用する理由はありません。Windows 認証を使用する場合は、認証を受けていないとサイトにアクセスできないためです)

Windows 認証を使用したいが、SqlRoles を使用したい場合は、おそらく次のようなことをしたいと思うでしょう:

http://weblogs.asp.net/scottgu/pages/Recipe_3A00_-Implementing-Role_2D00_Based-Security-with-ASP.NET-2.0-using-Windows-Authentication-and-SQL-Server.aspx

于 2012-10-09T23:21:36.603 に答える