【问题标题】:OWIN cookie authentication get roles on client sideOWIN cookie 身份验证在客户端获取角色
【发布时间】:2016-06-14 15:52:26
【问题描述】:

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

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

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

谢谢

【问题讨论】:

  • 请先描述您的实际目标,然后根据您的评论重写您的问题,因为看起来您正在尝试做一些奇怪的事情,
  • 谢谢!更新了我的问题以更清楚

标签: javascript asp.net asp.net-web-api owin


【解决方案1】:

我完全同意@cassandrad!

但如果您想以纯文本形式访问它,则必须在 CookieAuthenticationOptions 中提供自己的 TicketDataFormat 实现

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
    }
}

【讨论】:

    【解决方案2】:

    您无需将有关处于“原始”状态的角色或权限的信息传递给客户端。相反,您应该拥有AuthenticationTicket — 保存所有受保护和加密的信息的东西。因此,如果您使用正确的 OWIN 中间件实现,则无需自己做任何事情 - 中间件会将所有必要的数据添加到您的响应中(在 cookie 中),客户端只需下次将此信息重新发送回服务器当他想访问服务器上的某些资源时。

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

    【讨论】:

    • 在我的情况下,我需要根据用户拥有的角色在客户端显示特定项目。所以我需要以某种方式将这些角色“转移”到客户端。那么问题是如何将这些角色“转移”到客户端
    • @JauniusEitmantis,您不需要客户端的实际角色。如果只是动画的问题,那么您可以在客户端发送任何内容,以某种方式标记您要显示哪种动画。如果是显示某些特定信息(文本)的问题,那么您可以发送特定文本并在服务器端做出决定。如果它是一些功能,那么您需要在服务器端准备所有必要的脚本、数据和标记,然后根据特定角色将其发送到客户端。一般来说,客户端不应该操作诸如角色之类的术语
    • 您能详细说明一下吗?为什么根据用户的角色隐藏/显示 html 项目是个坏主意?如果恶意用户试图取消隐藏这些元素,他无论如何都无法访问服务器,也不会看到任何内容,因为服务器将返回未经授权的..
    • 一般来说这是一个不好的方法。当然,如果您只显示或隐藏一些 html 标记,那么您是非常安全的。但是其他所有依赖于角色的东西都应该在服务端准备好,以避免用户做出有害行为的可能性。如果你将一些与权限检查相关的逻辑放在服务器端,而将一些逻辑放在客户端,它看起来会很奇怪并且不一致。这个主题相当广泛,最好在单独的问题中获得好的答案。
    猜你喜欢
    • 2015-03-13
    • 2023-04-05
    • 1970-01-01
    • 2015-10-29
    • 2019-10-29
    • 2015-10-09
    • 2023-03-31
    • 2017-05-06
    • 2016-07-09
    相关资源
    最近更新 更多