在Wcf数据服务中授权
问题描述:
我在写WCF REST数据服务。我需要根据url地址(https)给出的登录名和密码添加授权系统。在Wcf数据服务中授权
在每一个URL应该登录名和密码:
https://myservice.svc/Products()?$orderby=name&login=user_login&pass=user_pass
而且在服务端我要让授权。应该检查用户是否有权限访问数据。在这种情况下,应该检查用户是否具有读取表产品的角色。 角色存储在数据库中。
有没有机会做到这一点?
答
实现OnStartProcessingRequest方法。
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class ServiceODataAFR : EntityFrameworkDataService<PortalContext>
{
public static void InitializeService(DataServiceConfiguration config)
{
ValidarAcesso();
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
}
protected override void OnStartProcessingRequest(ProcessRequestArgs args)
{
ValidarAcesso();
base.OnStartProcessingRequest(args);
}
private static void ValidarAcesso()
{
using (var context = new PortalWeb())
{
if (!context.UsuarioEstaNoGrupo(EnumGrupoPermissao.AdministradorAFR.GetTitle()))
{
throw new AddressAccessDeniedException();
}
}
}
我相信你有机会做到这一点,但我质疑网址中包含用户名和密码的智慧。 WCF为您提供了一系列验证呼叫者的方式。他们怎么了? – 2012-03-14 02:36:39
嘿,它们没有错,但我需要更多的复杂功能。上面的这个例子只是一个可以帮助我解决问题的例子。 – nosbor 2012-03-14 16:27:44
不会在URL中输入密码使其完全不安全并且无法使用https?相反,您应该考虑将登录详细信息作为您的服务中的发布内容..或仅使用HTTP基本身份验证 – Seph 2012-04-08 08:21:44