Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.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
Javascript OWIN cookie身份验证在客户端获取角色_Javascript_Asp.net_Asp.net Web Api_Owin - Fatal编程技术网

Javascript OWIN cookie身份验证在客户端获取角色

Javascript OWIN cookie身份验证在客户端获取角色,javascript,asp.net,asp.net-web-api,owin,Javascript,Asp.net,Asp.net Web Api,Owin,我正在开发一个后端基于asp.net owin的应用程序。 在Startup.cs中,我有IAppBuilder.useCookieAuthentication(){…}。成功身份验证后,可以通过HttpContext在所有my web api控制器中访问当前用户及其角色 我的javascript客户端需要了解这些角色,以便知道如何显示特定项。例如:具有管理员角色的用户可以看到其他选项卡 我的问题是:将这些角色“转移”到客户端的最佳方式是什么。是通过编写将返回这些角色的端点,还是通过其他方式 谢

我正在开发一个后端基于asp.net owin的应用程序。 在Startup.cs中,我有IAppBuilder.useCookieAuthentication(){…}。成功身份验证后,可以通过HttpContext在所有my web api控制器中访问当前用户及其角色

我的javascript客户端需要了解这些角色,以便知道如何显示特定项。例如:具有管理员角色的用户可以看到其他选项卡

我的问题是:将这些角色“转移”到客户端的最佳方式是什么。是通过编写将返回这些角色的端点,还是通过其他方式


谢谢

您不需要将有关处于“原始”状态的角色或权限的信息传递给客户端。相反,您应该拥有
身份验证票证
——一种保存所有信息并对其进行保护和加密的东西。因此,如果您使用的是OWIN中间件的正确实现,就不需要自己做任何事情——中间件会将所有必要的数据添加到您的响应中(在cookies中),客户端只需要在下次访问服务器上的某些资源时将这些信息重新发送回服务器


是的,我的意思是你不应该在你的客户端上有任何关于权限的信息——这是不安全的。

我完全同意@cassandrad

但是,如果您想以纯文本形式访问它,则必须在
CookieAuthenticationOptions

public class CustomAccessTokenFormat : ISecureDataFormat<AuthenticationTicket>
{
    // If you want to do custom serialization and encryption
    public string Protect(AuthenticationTicket ticket)
    {
        return "UserName|Role1|Role2|..."; // your raw text serialization goes here
    }

    // Deserilaize and decrypt the ticket
    public AuthenticationTicket Unprotect(string strTicket)
    {
        return new AuthenticationTicket(null, null); // deserialize the plain text here into an AuthenticationTicket object
    }
}
公共类CustomAccessTokenFormat:ISecureDataFormat { //如果要进行自定义序列化和加密 公共字符串保护(身份验证票证) { return“UserName | Role1 | Role2 |……”//原始文本序列化在这里 } //对票据进行反序列化和解密 公共身份验证票证取消保护(字符串strTicket) { 返回新的AuthenticationTicket(null,null);//将此处的纯文本反序列化为AuthenticationTicket对象 } }
在我的例子中,我需要根据用户的角色在客户端显示特定的项目。所以我需要以某种方式将这些角色“转移”到客户端。问题是如何将这些角色“转移”给客户side@JauniusEitmantis,您不需要客户端的实际角色。如果这只是一个动画问题,那么您可以在客户端发送任何内容,以标记您希望显示哪种动画。如果是显示某些特定信息(文本)的问题,那么您可以发送特定文本并在服务器端做出决定。如果是某种功能,则需要在服务器端准备所有必要的脚本、数据和标记,然后根据特定角色将其发送到客户端。一般来说,客户端不应该使用这样的术语,因为您能详细说明一下吗?为什么根据用户的角色隐藏/显示html项目是个坏主意?如果Malicius用户试图取消隐藏这些元素,他将无法访问服务器,也看不到任何内容,因为服务器将返回未经授权的内容。这通常是一种不好的方法。当然,如果您只显示或隐藏一些html标记,那么您是非常安全的。但是,依赖于角色的所有其他内容都应该在服务端准备好,以避免来自用户的有害操作。如果您将一些与权限检查相关的逻辑放在服务器端,而将一些逻辑放在客户端,则看起来很奇怪,而且不一致。这个主题相当广泛,最好在一个单独的问题中得到好的答案。请首先描述您的实际目标,并重写您的问题,因为根据您的评论,您似乎在尝试做一些奇怪的事情,谢谢!更新了我的问题,使之更加清晰