首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PrincipalPermissions 4.0中使用XSockets.Net属性

在PrincipalPermissions 4.0中使用XSockets.Net属性
EN

Stack Overflow用户
提问于 2014-09-07 18:39:45
回答 1查看 82关注 0票数 0

在XSockets控制器中,我需要调用Api (程序集),它在其方法上具有特定角色的PrincipalPermissions属性,并且不知道它正在运行的主机(也可以在批处理过程中调用,WebApi控制器等等)。据我所知,XScockets将标识/主体存储在自己的ConnectionContext对象中,以及控制器OnAuthorization方法使用的自定义授权属性中。

问题是是否可以使用具有主体权限的现有代码,因此它总是从调用方上下文中获得正确的角色。

我想到了两个选择:

1)在我的身份验证管道中切换线程主体,因此ConnectionContext和当前线程具有相同的主体:

代码语言:javascript
复制
    var identity = new GenericIdentity(authenticationTicket.Name);
    string[] roles = authenticationTicket.UserData.Split('|');
    var principal = new GenericPrincipal(identity, roles);
    protocol.ConnectionContext.User = principal;
    **Thread.CurrentPrincipal = principal;**

2)在控制器中的OnAuthorization覆盖中执行此操作:

代码语言:javascript
复制
    public override bool OnAuthorization(IAuthorizeAttribute authorizeAttribute)
    {
        Thread.CurrentPrincipal = ConnectionContext.User;
        return base.OnAuthorization(authorizeAttribute);
    }

第二种方法似乎适用于我的基本测试。实际上,当我这样做时,只要用一次授权属性标记控制器类就足够了,然后我就可以在控制器方法上使用PrincipalPermission,甚至一些定制的CodeAccessSecurity属性。

这样做安全吗?是否有一些异步行为会使其容易出错?有什么可供选择的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-09 18:44:39

目前,我描述的解决方案2似乎运行良好。由于没有人试图答复,我将接受它作为一个答案,并继续测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25713531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档