C# 在Wcf数据服务中进行授权

C# 在Wcf数据服务中进行授权,c#,.net,wcf,authorization,wcf-data-services,C#,.net,Wcf,Authorization,Wcf Data Services,我正在编写WCF REST数据服务。我需要添加基于url地址(https)提供的登录名和密码的授权系统 每个url中都应包含登录名和密码: https://myservice.svc/Products()?$orderby=name&login=user_login&pass=user_pass 在服务端我想进行授权。应检查用户是否具有访问数据的权限。在此场景中,应该检查用户是否具有读取表产品的角色角色存储在数据库中 有机会吗?实现OnStartProcessingReques

我正在编写WCF REST数据服务。我需要添加基于url地址(https)提供的登录名和密码的授权系统

每个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();
                }
            }
        }
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Required)]
[ServiceBehavior(IncludeExceptionDetailInFaults=true)]
公共类服务OATAAFR:EntityFrameworkDataService
{
公共静态void InitializeService(DataServiceConfiguration配置)
{
ValidarAcesso();
config.DataServiceBehavior.MaxProtocolVersion=DataServiceProtocolVersion.V3;
config.SetEntitySetAccessRule(“*”,EntitySetRights.AllRead);
}
受保护的覆盖无效OnStartProcessingRequest(ProcessRequestArgs args)
{
ValidarAcesso();
base.OnStartProcessingRequest(args);
}
私有静态void ValidarAcesso()
{
使用(var context=new PortalWeb())
{
if(!context.UsuarioEstaNoGrupo(EnumGrupoPermissao.AdministradorAFR.GetTitle())
{
抛出新的AddressAccessDeniedException();
}
}
}

我相信您有机会做到这一点,但我怀疑在url中包含用户名和密码是否明智。WCF为您提供了一系列验证呼叫者的方法。它们有什么问题?嘿,它们没有什么问题,但我需要更复杂的功能。上面的示例只是一个可以帮助我解决问题的示例不要在URL中输入密码,使它完全不安全,并且无法使用HTTPS。你应该考虑将登录细节作为服务中的帖子内容,或者只使用HTTP基本身份验证。