>
>单个登录(SSO)是一个过程,该过程允许用户在使用用户身份验证(即登录一次)后访问多个服务。这涉及到登录主要服务后,用户已授予所有服务的身份验证。除其他好处外,SSO避免了通过密码或其他身份验证系统一遍又一遍地确认身份的单调任务。>
>让我们更详细地研究SSO,我们将使用非常著名的服务来展示其用途和好处。身份验证过程
第一步是登录主要服务(例如,Facebook或Google)。
>当您构建自己的产品时,您需要确保其所有组件都使用相同的身份验证。当您的所有服务都局限于您自己的代码库时,这很容易做到。但是,借助诸如Disqus评论系统和用于客户关系管理的Freshdesk之类的流行服务,最好使用这些服务,而不是从头开始创建自己的。
,但是使用此类第三方服务引起了一个问题。由于他们的代码托管在各自的服务器上,因此用户也需要在其服务上明确登录,即使他们登录到您的网站。如前所述,解决方案是SSO的实现。>理想情况下,您提供了一双钥匙 - 公共和私人。您为登录用户生成一个令牌,并将其与您的公钥一起发送到服务以进行验证。经过验证后,用户将自动登录到服务。为了更好地理解这一点,让我们以一个真实的例子。
>disqus sso
>由于DISQUS评论系统已嵌入您的页面中,因此,如果他或她已经在您的网站上登录,则必须在Disqus中第二次登录。 Disqus具有有关如何集成SSO的广泛文档。
>您首先使用私人和公共disqus api键生成一个称为remote_auth_s3的密钥,用于登录用户。当您将SSO注册为Disqus中的免费附加组件时,您将提供公共和私钥。>您将用户的信息(ID,用户名和电子邮件)传递给DISQU,以作为JSON的身份验证。您会在页面上渲染DISQUS系统时生成一条消息。为了更好地理解它,让我们看看用Python编写的示例。
>
> disqus在github上提供了几种流行语言中的代码示例。。
生成消息>示例Python代码(在GitHub上找到可以在您的网站上登录用户如下。
>初始化disqus注释
然后,您在JavaScript请求中将此生成的令牌以及您的公钥发送到Disqus。如果验证身份验证,生成的注释系统已经登录了。>我们可以在博客碗上看到SSO的实现,该博客碗是Python/Django开发的博客目录。如果您已登录到网站,则应在渲染DISQUS评论系统时登录。在此示例中,该人对象存储ID(对于网站上的每个人来说是唯一的),电子邮件和PEN_NAME。该消息的生成如下所示。
<span>import base64 </span><span>import hashlib </span><span>import hmac </span><span>import simplejson </span><span>import time </span> DISQUS_SECRET_KEY <span>= '123456' </span>DISQUS_PUBLIC_KEY <span>= 'abcdef' </span> <span>def get_disqus_sso(user): </span> <span># create a JSON packet of our data attributes </span> data <span>= simplejson.dumps({ </span> <span>'id': user['id'], </span> <span>'username': user['username'], </span> <span>'email': user['email'], </span> <span>}) </span> <span># encode the data to base64 </span> message <span>= base64.b64encode(data) </span> <span># generate a timestamp for signing the message </span> timestamp <span>= int(time.time()) </span> <span># generate our hmac signature </span> sig <span>= hmac.HMAC(DISQUS_SECRET_KEY, '%s %s' % (message, timestamp), hashlib.sha1).hexdigest() </span> <span># return a script tag to insert the sso message </span> <span>return """<script type="text/javascript"> </span><span> var disqus_config = function() { </span><span> this.page.remote_auth_s3 = "%(message)s %(sig)s %(timestamp)s"; </span><span> this.page.api_key = "%(pub_key)s"; </span><span> } </span><span> </script>""" % dict( </span> message<span>=message, </span> timestamp<span>=timestamp, </span> sig<span>=sig, </span> pub_key<span>=DISQUS_PUBLIC_KEY, </span> <span>)</span>
>在前端,您只需打印此变量即可执行脚本。有关现场演示,您可以在博客碗中访问此帖子,并检查底部的评论。自然,您不会登录。
>
接下来,登录博客碗,再次访问同一帖子(您需要登录以查看效果)。请注意,您已登录下面的评论系统。
>
>博客碗提供的另一个有趣的功能是匿名,在发布内容时(如本文)。想一想一种情况,您希望用户以匿名用户(例如在Quora上)发布有关DISQU的评论的答复。我们以简单的方式出路,并在ID上附加了大量。为了与用户相关联(因此,它与用户的其他评论都不会出现),我们也会生成一个唯一的电子邮件。这样可以将您的匿名评论融合在一起,但并不将其与其他用户的原始个人资料或匿名评论相结合。
>
,这是代码:
sso <span>= get_disqus_sso({ </span> <span>'id': person.id, </span> <span>'email': person.user.email, </span> <span>'username': person.pen_name </span><span>})</span>
尽管不同服务的SSO过程略有不同,但是它们背后的基本思想是相同的 - 生成令牌并验证它!我希望这篇文章能帮助您深入了解应用程序如何集成SSO,也许这将帮助您自己实施SSO。
如果您有任何纠正,问题或与SSO共享自己的经验,请随时发表评论。>关于单次登录(SSO)
>单登录(SSO)是否存在任何风险?带有潜在的风险。如果用户的SSO凭据受到损害,攻击者可以访问与这些凭据相关的所有应用程序。因此,实施强大的安全措施(例如多因素身份验证和常规密码更新)以减轻这些风险至关重要。
SSO和MFA都是身份验证方法,但它们的目的不同。 SSO通过允许用户访问具有一组凭据的多个应用程序来简化登录过程。另一方面,MFA通过要求用户在授予访问之前提供两种或多种形式的身份证明来增强安全性。
>>哪些行业可以从单个登录(SSO)(SSO)中受益?受益于SSO。严重依赖多个应用程序(例如医疗保健,教育,金融和技术)的行业尤其可以从SSO提供的便利性和安全性中受益。
以上是单登录(SSO)解释了的详细内容。更多信息请关注PHP中文网其他相关文章!