对WCF,ASP.Net和身份验证/授权知之甚少,我很难解释困扰我的事情。
我正在使用ASP.Net MVC 3应用程序作为我正在开发的系统的前端。该网站与WCF Web服务进行通信,并从中获取所有信息。
将有预定义的用户,并且每个用户都具有唯一的访问权限(因此操作可以解析特定于该用户的信息)。此外,用户的登录信息将存储在服务端。
现在的问题是,我该如何处理身份验证和/或授权?
我希望用户能够登录网站,所以我猜他会对网络服务进行验证调用,如果经过验证,则设置一个forms.authentication cookie客户端。
然后,如果他提出像ChangePassword这样的新请求(对他来说是独一无二的),我应该以某种方式再次验证他吗?也许已经创建了一个令牌供他发送请求?
我是否也可以只进行所有验证服务,以便服务知道用户是谁并只返回与他相关的数据(无需在方法调用中特别提及他?
这样的服务是否会以某种方式区分客户端网站的授权和用户自己?我的意思是我想确保正在使用的工具是合法的,并且用户尝试执行的操作是正常的。
我很难理解所有这些是如何协同工作的,而是宁愿解释一下这是如何工作的,而不是关于如何做到这一点的教程(就像谷歌搜索一样)。
答案 0 :(得分:1)
“我很难理解这一切是如何协同工作的”
这是对WCF的一个很好的总结。 :)
WCF将使用成员资格/角色提供程序进行登录。需要在配置文件的serviceModel部分配置它们。
您的服务的用户将使用代理的用户名/密码属性,或者如果不使用生成的代理,则必须自己生成ws-security xml配置。
我删除了除会员/角色之外的所有东西,所以这不是(可能)工作配置部分。
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MyCompany.Api.Services.WebService.MyProductServiceBehavior">
<serviceCredentials>
<userNameAuthentication
userNamePasswordValidationMode="MembershipProvider"
membershipProviderName="MyCompanyMembershipProvider" />
</serviceCredentials>
<serviceAuthorization principalPermissionMode='UseAspNetRoles' roleProviderName='MyCompanyRoleProvider' />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="MembershipBinding">
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None" />
<message clientCredentialType="UserName" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="MyCompany.Api.Services.WebService.MyProductServiceBehavior" name="MyCompany.Api.Services.WebService.MyProductService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="MembershipBinding" contract="MyCompany.Api.Services.WebService.IMyProductService" />
</service>
</services>
以下是使用生成的代理的示例:
api = new MyProxyService.MyProxyServiceClient();
api.ClientCredentials.UserName.UserName = userAcct;
api.ClientCredentials.UserName.Password = password;
api.MethodCall();