使用Angular,Ember,React等框架构建SPA风格的应用程序时,人们认为什么是身份验证和会话管理的最佳实践?我可以想到几种方法来考虑解决问题.
假设API和UI具有相同的原始域,则与使用常规Web应用程序的身份验证没有什么不同.
这可能涉及具有会话cookie,服务器端会话存储以及可能的一些会话API端点,经过身份验证的Web UI可以点击以获取当前用户信息以帮助个性化或甚至可能确定客户端上的角色/能力.当然,服务器仍会强制执行保护数据访问的规则,UI只会使用此信息来自定义体验.
像使用公共API的任何第三方客户端一样对待它,并使用类似于OAuth的某种令牌系统进行身份验证.客户端UI将使用此令牌机制来验证对服务器API发出的每个请求.
我在这里并不是一位专家,但对于绝大多数情况来说,#1似乎已经足够了,但我真的很想听到一些更有经验的意见.
security authentication ember.js angularjs single-page-application
我读过SPA及其优点.我发现他们中的大多数都不能令人信服.有三个优点引起了我的怀疑.
问题: 你能否作为SPA的拥护者并证明我对前三个陈述有误?
=== ADVANTAGES ===
Run Code Online (Sandbox Code Playgroud)
1. SPA非常适合响应迅速的网站:
服务器端呈现很难为所有中间状态实现 - 小视图状态不能很好地映射到URL.
单页应用程序的区别在于它们能够重绘UI的任何部分而无需服务器往返来检索HTML.这是通过具有处理数据的模型层和从模型读取的视图层将数据与数据表示分离来实现的.
为非SPA持有模型层有什么问题?SPA是客户端唯一与MVC兼容的架构吗?
2.使用SPA,我们不需要对服务器使用额外的查询来下载页面.
哈,用户在访问您的网站时可以下载多少页?二三?相反,出现了另一个安全问题,您需要将登录页面,管理页面等分成单独的页面.反过来,它与SPA架构发生冲突.
3.可能还有其他优势吗?不要听到任何其他..
=== DISADVANTAGES ===
Run Code Online (Sandbox Code Playgroud)
PS我曾参与SPA和非SPA项目.我问这些问题因为我需要加深理解.没有理由伤害SPA支持者.不要让我再读一些关于SPA的信息.我只是想听听你对此的考虑.
你如何明确地检测用户是否按下了浏览器中的后退按钮?
如何使用#URL
系统在单页Web应用程序中强制使用页内后退按钮?
为什么地球上没有浏览器按钮触发他们自己的事件!?
当应用程序依赖无状态身份验证(使用HMAC之类的东西)时,是否有必要使用CSRF保护?
例:
我们有一个单页应用程序(否则我们必须在每个链接上附加令牌:<a href="...?token=xyz">...</a>
.
用户使用身份验证自己POST /auth
.成功验证后,服务器将返回一些令牌.
令牌将通过JavaScript存储在单页面应用程序内的某个变量中.
此令牌将用于访问受限制的URL,例如/admin
.
令牌将始终在HTTP标头内传输.
没有Http Session,也没有Cookies.
据我所知,应该(?!)不可能使用跨站点攻击,因为浏览器不会存储令牌,因此它无法自动将其发送到服务器(这就是使用Cookies时会发生的情况/会议).
我错过了什么吗?
authentication csrf stateless csrf-protection single-page-application
我意识到这是一个基本问题,但我没有在其他地方找到答案.
是store.dispatch
同步还是异步Redux
?
如果它是异步的,有可能在动作传播之后添加回调,因为它可以用React
?
假设我有一个单页应用程序,它使用第三方API作为内容.应用程序的逻辑仅在浏览器中,并且没有我可以写入的后端.
为了允许深度链接到应用程序的状态,我使用pushState来跟踪确定应用程序状态的一些变量(注意Ubersicht的公共版本还没有这样做).在这种情况下repos
,labels
,milestones
和username
,show_open
(布尔)和with_comments
(布尔)和without_comments
(布尔).URL格式是?label=label_1,label_2,label_3&repos=repo_1…
.值通常是嫌疑人,大致[a-zA-Z][a-zA-Z0-9_-]
或任何布尔指标.
到现在为止还挺好.现在,因为查询字符串可能有点长而且不实用,并且我希望能够传递类似http://espy.github.io/ubersicht/?state=SOMOPAQUETOKENTHATLOSSLESSLYDECOMPRESSESINTOTHEORIGINALVALUES#hoodiehq
的URL ,越短越好.
我的第一次尝试是使用一些类似zlib的算法(https://github.com/imaya/zlib.js)和@flipzagging指向antirez/smaz(https // github.com/antirez/smaz)听起来更适合短字符串(JavaScript版本在https://github.com/personalcomputer/smaz.js).
由于=
和&
没有具体处理https://github.com/personalcomputer/smaz.js/blob/master/lib/smaz.js#L9,我们也许能够调整的东西有一点点.
此外,还有一个选项可以对固定表中的值进行编码,例如,参数的顺序是预定义的,我们需要跟踪的是实际值.例如,可能在smaz压缩之前a=hamster&b=cat
变成7hamster3cat
(长度+字符)或仓鼠|猫(值+ |
).
还有什么我应该找的吗?
我目前正在使用angularjs编写一个Web应用程序,但我认为这个问题适用于在客户端进行路由的任何客户端javascript框架(如角度所做).
在单页面应用中,处理错误网址的正确方法是什么?
查看几个主要网站,如果您在https://mail.google.com/mail/下面输入任意随机网址,我会看到Gmail会重定向到收件箱.这发生在服务器端(使用http 300代码)或客户端,具体取决于错误路径是在#字符之前还是之后.另一方面,twitter显示任何无效URL的真实HTTP 404.第三种选择是显示"软"404,纯粹的客户端错误页面.
这些解决方案似乎适合不同的情况.Twitter希望Twitter用户和推文的链接是真实的链接,因此人们可以分享它们,在新闻文章中发布它们等,因此无效链接被识别是非常重要的(如果我的推文链接断开了)我的网站,一个简单的爬行会告诉我).另一方面,在gmail中,您不应该将链接分享到您的收件箱中,我甚至不确定链接是否真的是永久性/持久性的:似乎网址更新主要用于浏览器历史记录导航的目的.单页应用.给出软错误的第三种方法可能适用于类似于gmail的情况,但是没有合理的"默认"页面.
经过这么长时间的介绍,这里有一些具体的问题:
javascript singlepage http-status-code-404 angularjs single-page-application
注意:这个问题也可以是:
如何在Java中支持hashbang-less客户端mvc框架的书签.
我过渡使用的角度应用hashtags
到一个是html5mode
.我成功了
$locationProvider.html5Mode(true);
Run Code Online (Sandbox Code Playgroud)
来自着陆页(index.html)的所有链接都可以正常工作.
问题是,如果直接引用部分URL,我自然会得到404,因为服务器端点定义没有耦合到客户端定义的路由.
因此,如果没有HTML5,我们会得到非SEO友好的hashbang,但是有了它,我们就不能为登陆页面(bootstraps angular的页面)以外的任何内容添加书签.
如果首先请求默认登录页面(index.html),为什么它可以工作,即htpp://mydomain.com/:
如果直接从浏览器请求(即)http://mydomain.com/foo,为什么它不起作用:
这个故事遗漏了一些东西,我只是不知道是什么.以下是我能看到的唯一两个答案......
使用OAuth时(2)我需要在我的应用程序中使用重定向端点,一旦我通过身份验证,OAuth提供服务就可以重定向到该端点.
如何在单页面应用程序中处理此问题?当然,重定向到OAuth提供服务并不好,甚至可能无法重定向.
我知道OAuth还支持基于用户名/密码的令牌生成.这与AJAX调用完美配合,但要求我的单页应用程序要求输入用户名和密码.
你通常如何处理这个?
javascript ×5
angularjs ×3
ajax ×1
architecture ×1
back ×1
browser ×1
client-side ×1
compression ×1
csrf ×1
durandal ×1
ember.js ×1
java ×1
oauth ×1
oauth-2.0 ×1
phantomjs ×1
reactjs ×1
redux ×1
security ×1
seo ×1
singlepage ×1
stateless ×1
url ×1
web.xml ×1