C#学习教程:CustomAuthorizationPolicy.Evaluate()方法从不在wcfwebhttpbinding中触发Role="Admin")][WebInvoke(Method="GET",UriTemplate="/Data/{data}")]stringGetData(stringdata);所以我创建了一个自定义授权,你可以看到:publicclassAuthorizationPolicy:IAuthorizationPolicy{stringid=Guid.NewGuid().ToString();publicstringId{get{returnthis.id;}}publicSystem.IdentityModel.Claims.ClaimSetIssuer{get{返回System.IdentityModel.Claims.ClaimSet.System;}}//在身份验证阶段之后调用此方法publicboolEvaluate(EvaluationContextevaluationContext,refobjectstate){//获取经过身份验证的客户端身份IIdentityclient=HttpContext.Current.User.Identity;//设置自定义主体evaluationContext.Properties["Principal"]=newCustomPrincipal(client);返回真;}}发布icclassCustomPrincipal:IPrincipal{privateIIdentity_identity;publicIIdentityIdentity{get{return_identity;}}publicCustomPrincipal(IIdentityidentity){_identity=identity;}publicboolIsInRole(stringrole){//我的代码返回真;//返回Roles.IsUserInRole(角色);}}和身份验证:publicclassRestAuthorizationManager:ServiceAuthorizationManager{protectedoverrideboolCheckAccessCore(OperationContextoperationContext){//提取Authorizationheader,解析出凭证转换Base64字符串:varauthHeader=WebOperationContext.Current.IncomingRequest.Headers["授权”];if((authHeader!=null)&&(authHeader!=string.Empty)){varsvcCredentials=System.Text.ASCIIEncoding.ASCII.GetString(Convert.FromBase64String(authHeader.Substring(6))).Split(':');varuser=new{名称=svcCredentials[0],密码=svcCredentials[1]};如果((用户名==“1”&&用户。密码=="1")){//这里我从数据库中获取我的用户的角色//返回管理员角色//用户被授权并且发起呼叫将继续returntrue;}else{//未授权returnfalse;}}else{//没有提供授权标头,因此在继续之前要求客户端提供:WebOperationContext.Current.OutgoingResponse.Headers.Add("WWW-Authenticate:Basicrealm="MyWCFService"");//抛出一个异常,关联的HTTP状态代码相当于HTTP状态401thrownewWebFaultException(HttpStatusCode.Unauthorized);所以我在我的IIS中创建和https托管,我上传服务,我的身份验证类正在运行但我的授权不是为什么?如您所见,我在我的网络配置中定义了我的身份验证。但我不知道如何在我的网络配置中定义我的授权。我的意思是当我在客户端调用我的服务时。该服务不检查授权能力。我应该在webconfig中定义我的自定义授权类,但我不知道如何?publicboolIsInRole(stringrole){//我的代码返回真;//返回Roles.IsUserInRole(角色);您可能需要在Web配置文件中设置serviceCredentials:这是有关serviceCredentials的更多信息的链接:https:///docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/wcf/servicecredentials您可以在标记内指定自定义AuthorizationPolicy,例如:在WCF文档中,ImplementingCustomAuthorizationforWCFServicesPolicy有一个很好的例子。但是,重写抽象AuthorizationManager基类的CheckAccess方法时要小心。基类的方法在内部调用GetAuthorizationPolicies方法来检索所有IAuthorizationPolicy对象的集合(另请参阅此博客文章)。如果重写CheckAccess并且不调用父类的方法,则不会调用IAuthorizationPolicy对象的任何Evaluate方法。以上为C#学习教程:CustomAuthorizationPolicy.Evaluate()方法永远不会触发wcfwebhttpbinding中分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——本文来自网络合集,不代表立场,如涉及侵权,请点击右转联系管理员删除。如需转载请注明出处:
