2017-10-05 51 views
0

我想建立一个单一的登录界面(与角),这应该是一种独立的,因此它可以用来和/嵌入任何网页上。如何构建单一登录应用程序(电子邮件和通行证)?

E.g.客户可以将其嵌入到其索引页面上,并且代码/函数应该从JavaScript API传递并构建UI和连接。

我'想着像单点登录应用程序,允许用户通过他们的Facebook账号在其他网站上互动的概念。 有点像Facebook连接。

什么是达到这个最好的方法?首选技术是Angular2,Angular4

+0

许多单一的登录机制您参考使用的OAuth2。实现你自己有点痛苦,所以我建议找一个已经存在的库 – Basic

+0

我已经有一个带有角度的登录应用(邮件和传递),它使用JWT Auth - 向服务器发送凭证并获取令牌作为回应。问题是我怎样才能将它作为单一登录提供,以便客户可以嵌入它。 换句话说,如何将它提供给客户...作为不是我想要的并且对我来说没有意义的链接......我想到了一种在头部添加的脚本'脚本src =“myscripts.js”>'和scriptlet(javascript函数),可以嵌入调用并使用API​​。这是否是一个正确的场景? –

+1

我明白,但并不那么简单。当然,您可以让第三方应用程序(3PA)通过证书(通过SSL?),然后中继身份验证令牌。现在3PA可以模拟你的用户,你不会知道它们的区别。受损的3PA =所有用户都易受攻击。你有意创造一个中间人的情况。这就是为什么OAuth和其他协议可以避免这些问题。在这种情况下,3PA建立了通信,但用户的浏览器直接与您的服务器通信以进行身份​​验证,然后令牌被委派给3P。这样,没有人可以窃取用户的信用。 – Basic

回答

1

[不完全是一个答案,但太长评论]

我认为根本不匹配的是,你问“我该怎么办权威性”和我“有很多方法,有不同的成本/收益,你需要评估它们并为你的用例选择正确的方法。”OAuth2是一个明智的起点,但其他许多存在。“

之后,发现做的工作是(相对)简单的库。

所以......有许多的事情,我想你会需要得到确定下来,然后才能继续。

我最初的问题是:

  • 什么级别的安全性我们需要为最终用户提供考虑到真实暴露的数据。
  • 谁是我们的敌人?黑客?民族国家?心怀不满的员工呢?
  • 我们怎么来减轻对上述所有的?
  • 什么记录和审计,将需要使违反后,我们可以明白发生了什么。
  • 如果我们用第三部分IAM服务,什么样的数据它希望传递给它?它返回。它是否自动处理3路验证(我们,最终用户,第三方)还是必须围绕它进行构建?如果是后者,IAM提供者是否具有包含我们所需功能的SDK /类似。

广招,我建议做这样一个架构:

  • 用户希望在第三方应用程序来验证
  • 3PA将用户重定向到你的服务器/ API/IAM平台,用户登录(或回收活动会话)。
  • 您的系统提示用户允许3PA访问(的一个子集?)你的数据。
  • 假设用户批准,将用户重定向回3PA,与身份验证令牌特定于该3PA沿。

然后,3PA可以使用该标记代表用户行动,直到标记被取消。

优点:

  • 3PA永远不会看到用户凭据,只有一个成功的批准后得知其令牌。
  • 令牌是特定的每项服务,这意味着您可以撤销一个站点的权限而无需撤消所有服务。
  • 用户可以跟踪谁授权访问他们的详细信息。
  • 您可以跟踪哪些系统正在向您进行身份验证(取决于您在初始连接时要求提供多少信息,以及3PA是否需要预先注册并获取身份证以便能够请求身份验证)。

我所描述的基本上是一个简约的OAuth工作流程。你可以自己去实现它,但是有很多陷阱,我不相信你完全理解你所尝试的安全含义,所以我肯定会建议使用一个已知好的过程而不是尝试推出自己的。

假设OAuth符合您的使用案例....我从来没有必要从Angular做到这一点,所以不能推荐图书馆,但快速Google显示数十个...在结果顶部附近是一个简单的教程:https://devcenter.kinvey.com/angular/tutorials/how-to-implement-safe-signin-via-oauth

而且一个潜在的库:https://github.com/oauthjs/angular-oauth2(虽然一眼,似乎没有处理截获的凭据的情况非常好)

相关问题