Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有方法使用ASP.NET标识授权servicestack?_Asp.net_.net_Asp.net Mvc_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack - Fatal编程技术网 servicestack,Asp.net,.net,Asp.net Mvc,servicestack" /> servicestack,Asp.net,.net,Asp.net Mvc,servicestack" />

是否有方法使用ASP.NET标识授权servicestack?

是否有方法使用ASP.NET标识授权servicestack?,asp.net,.net,asp.net-mvc,servicestack,Asp.net,.net,Asp.net Mvc,servicestack,我发现的ASP.NET MVC和Servicestack之间相互身份验证的唯一示例涉及使用Servicestack的内置身份验证和为旧的MVC表单身份验证设置cookie 我感兴趣的是,是否有可能改变这一点,并使用新的ASP.NET标识系统授权servicestack服务 原因是,我理想情况下希望有一个简单的身份验证故事,并使用相同的属性,例如servicestack API中的[Authority][AllowAnonymous]from Identity 我没有使用Identity或serv

我发现的ASP.NET MVC和Servicestack之间相互身份验证的唯一示例涉及使用Servicestack的内置身份验证和为旧的MVC表单身份验证设置cookie

我感兴趣的是,是否有可能改变这一点,并使用新的ASP.NET标识系统授权servicestack服务

原因是,我理想情况下希望有一个简单的身份验证故事,并使用相同的属性,例如servicestack API中的[Authority][AllowAnonymous]from Identity


我没有使用Identity或servicestack插件的经验,因此如果其他人也有同样的想法,那就太好了。

我用自己的authorized属性装饰了servicestack服务,该属性连接到现有的asp.net中。也许这对你有帮助

public class ServiceStackToAspNetAuthorizeAttribute : RequestFilterAttribute
{
    private string _roles;
    private string[] _rolesSplit = new string[0];

    public string Roles
    {
        get { return _roles ?? String.Empty; }
        set
        {
            _roles = value;
            _rolesSplit = SplitString(value);
        }
    }

    public ServiceStackToAspNetAuthorizeAttribute(ApplyTo applyTo)
        : base(applyTo)
    {
        this.Priority = (int)RequestFilterPriority.Authenticate;
    }

    public ServiceStackToAspNetAuthorizeAttribute()
        : this(ApplyTo.All) { }


    public override void Execute(IRequest req, IResponse res, object requestDto)
    {
        if (!InternalAuthorize())
        {
            res.StatusCode = (int)HttpStatusCode.Unauthorized;
            res.EndRequest();
        }
    }

    private bool InternalAuthorize()
    {
        var context = HttpContext.Current;
        if (context != null)
        {
            var user = context.User;
            if (user != null)
            {
                if (!user.Identity.IsAuthenticated)
                    return false;
                if (_rolesSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole))
                    return false;
                return true;
            }
        }
        return false;
    }

    private static string[] SplitString(string original)
    {
        if (String.IsNullOrEmpty(original))
        {
            return new string[0];
        }

        var split = from piece in original.Split(',')
                    let trimmed = piece.Trim()
                    where !String.IsNullOrEmpty(trimmed)
                    select trimmed;
        return split.ToArray();
    }

}

…我将探讨的一些方法包括一个定制的AuthProvider,它将在OnAuthentication回调中通过MVC调用,如果不可能,另一种方法是自己在ServiceStack的会话中手动保存AuthUserSession,您可能还需要自己在响应上手动设置ServiceStack的ss id/ss pid cookies,因为标识基于OWIN而不是ASP.NET上下文,因此任何cookies ss集都可能被忽略mythzI最终决定使用ServiceStack的身份验证,但很高兴这里有这些信息。