편집 : 나는 또한 내가 웹 서비스의 보안 설정에서 일하고 있어요 SSL PrincipalPermission.Demand() failing once WCF Service was moved to SSLWCF CustomRoleProvider 및 원리 권한
을 사용하고 다음과 같이 나는이 문제가이 문제에 관련이있을 수 있다고 생각 사용자를 인증하기 위해 CustomRoleProvider와 CustomMembershipProvider를 구현했습니다.
이 방법이 유용하지만 사용자가 인증되지 않은 경우 대다수의 서비스 호출에 대한 액세스를 제한하고 싶습니다.
내가 그러나이[PrincipalPermission(SecurityAction.Demand, Authenticated=true)]
을 달성하기 위해 다음과 같은 사용에 대한 계획, 이것은 사용자가 인증하고 항상 보안 예외가 발생하면 감지하지 않는 것 같습니다. 나는 내가 뭘 잘못했는지 정말로 모른다.
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;
}
}
}
내 인증 서비스 호출 내에서 멤버 자격 공급자가 true를 반환하고 폼 인증 쿠키를 설정하는지 확인합니다. 다음과 같이
if (Membership.ValidateUser(username, password))
{
FormsAuthentication.SetAuthCookie(username, false);
}
내 웹 설정에서 서비스 권한을 설정 한 : 어떤 도움을 크게 감상 할 수
<behavior name="SecureAuthServiceBehavior">
<serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="CustomRoleProvider"/>
....
</behaviour>
, 감사
을편집 :
나는 짓을했는지 이 문제에 대한 추가 조사를 실시하고 교장이 올바르게 설정되었음을 발견했습니다. 다음 서비스 메소드가 있습니다. 그 중 Principal을 가져 와서 사용자가 올바른 역할을하고 있는지 확인하여 처음에 태그가 수행하는 작업을 효과적으로 수행합니다. 나는 시작에 주요 권한을 주석 경우
[PrincipalPermission(SecurityAction.Demand,Role="A")]
public bool DoWork()
{
IPrincipal p = HttpContext.Current.User;
if (p.IsInRole("A"))
{
return true;
}
else
{
return false;
}
}
이 방법은 현재이 방법이 작동하고 true를 반환 할 때마다 그러나, SecurityException를 슬로우합니다.