編集:私は私、私は、Webサービスの安全なセットに働いている問題は、私はまた、SSL PrincipalPermission.Demand() failing once WCF Service was moved to SSLWCF CustomRoleProvider原則権限
を使用しているとして、以下の問題に関連することができることを考えますユーザーを認証するためにCustomRoleProviderとCustomMembershipProviderを実装しました。
これはうまくいきますが、ユーザーが認証されていない場合は、ほとんどのサービス呼び出しへのアクセスを制限したいと考えています。
私はこの[PrincipalPermission(SecurityAction.Demand, Authenticated=true)]
を達成するために、次を使用して、計画
しかし、これは、ユーザーが認証されたときを検出していないようですし、常にセキュリティ例外がスローされます。私は間違ったことを本当に確信していません。メンバシッププロバイダはtrueを返し、フォーム認証Cookieを設定した場合、私の認証サービスコール内
public class CustomMembershipProvider : MembershipProvider
{
public string UserType;
public override bool ValidateUser(string username, string password)
{
//Custom logic to work out if user exists and password is correct
//If the user exists and password matches we will get a populated user
//object containing their username and usertype
if (user == null)
{
return false;
}
else
{
return true;
}
}
}
は、私が確認してください。
<behavior name="SecureAuthServiceBehavior">
<serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="CustomRoleProvider"/>
....
</behaviour>
任意の助けをいただければ幸いです、おかげで
EDIT:
私がやった、次のように私は私のウェブの設定でサービスの認可を設定した
if (Membership.ValidateUser(username, password))
{
FormsAuthentication.SetAuthCookie(username, false);
}
問題の詳細な調査を行い、プリンシパルが正しく設定されていることを発見しました。 私は以下のServiceメソッドを持っています。その中にプリンシパルを取得し、ユーザーが正しいロールにいるかどうかを確認し、開始時のタグが効果的にやっていることを確認します。
[PrincipalPermission(SecurityAction.Demand,Role="A")]
public bool DoWork()
{
IPrincipal p = HttpContext.Current.User;
if (p.IsInRole("A"))
{
return true;
}
else
{
return false;
}
}
このメソッドは現在、最初にプリンシパルのアクセス許可をコメントアウトすると常にSecurityExceptionをスローしますが、このメソッドは機能し、trueを返します。