由于各种原因,我需要使用服务器技术,在这种情况下ASP.Net来渲染我的Angular JS应用程序 . 因此,当用户请求索引页面时,请求将通过ASP.Net管道,该管道将为应用程序提供脚本,视图等 .
我需要在应用程序中获取一个不记名令牌,以便它可以调用各种Web API服务 .
从安全角度来看,将承载令牌传递给响应头中的用户浏览器是否可以接受?然后,当Angular JS应用程序启动时,它将从标头读取值并将其放入本地存储器以用于后续API请求 .
用户流程......
-
用户访问他/她未经过身份验证的members.domain.com .
-
用户重定向到OAuth提供商 .
-
用户通过提供商进行身份验证 .
-
然后将用户重定向回members.domain.com . 用户现在已经过身份验证,他们有一个cookie .
-
初始应用程序页面通过MVC管道呈现 . 检查声明并根据用户声明使用菜单选项(等)呈现UI(例如,角色= "recruiter"等) .
这将在用户浏览器上呈现初始应用程序,并根据用户声明创建菜单选项 .
现在缺少的部分是在浏览器中获取一个持票人令牌,可以用来调用各种API .
2 回答
UPDATE :我根据您更新的问题完全改变了我的答案 .
你想要做的事实际上听起来不错 . 听起来您将在客户端检查JWT作为您的Bearer令牌 .
要做到这一点,你需要做两件事之一:
如果你通过使用cookie确保'_912122安全',你可以在你的后端(
/me
或类似的东西)创建一个路由,当被请求时,它会返回所有当前登录用户的个人数据(他们的声明,以及呈现你需要的任何内容) UI) . 当Angular应用程序启动时,它可以向此页面发出请求,将通过已设置的cookie进行身份验证,并且只返回前端需要的任何数据来进行渲染 .如果你想在纯JS中做任何事情而冒更容易受到XSS攻击的风险,那么你可以将它存储在HTML5本地存储中,而不是将用户的Bearer令牌存储在cookie中 . 这样,您的Angular应用程序可以直接在浏览器中通过Javascript访问令牌以呈现页面 . 这可能会提供更快的性能,但这意味着任何可以在您的域上运行恶意JS的人也将能够读取用户的Bearer令牌(来自LocalStorage),并可能导致问题 .
最后:如果您使用LocalStorage路由,并将Bearer令牌存储在LocalStorage中,那么您可以执行以下操作来验证对您的后端的Angular API请求:
从LocalStorage中获取持有者令牌 .
向您的后端发出API请求,将Bearer令牌放入HTTP
Authorization
标头中 .在您的后端,解析HTTP
Authorization
标头,并获取令牌 .验证令牌以确保JWT有效/未过期/等 .
就是这样!
用于验证API请求的标准HTTP标头是HTTP授权,因此如果您想要执行您正在描述的流程(使用LocalStorage),只需将您的令牌放入HTTP授权中,您就可以开始使用了 . 大多数Web框架会自动处理此标头的解析,并在那里查找您将要发送的令牌等凭据 .
你可以使用这段代码......