国外persona用户画像

到目前为止,只有Twitter和Facebook身份验证,我决定将Mozilla Persona添加到我最新项目( 计算机 ,计算机生成的音乐)的列表中。 为什么?

  • 我喜欢尝试新事物
  • 存储密码是一个艰巨的过程,尽管我知道该怎么做,甚至大部分代码都写在另一个项目中,但我认为我不应该为每个需要密码认证的站点做出贡献
  • Mozilla是一个开放的基金会,迄今为止已经产生了许多出色的产品。 Persona实现了BrowserID协议,将来可能会在Firefox以外的其他浏览器中本地支持(目前,您需要包含.js文件)
  • 第三方身份验证已经尝试了很多次,这是一件很了不起的事情,但是由于一些原因,它并不是主流。 有所不同,《女神异闻录》可能会成功地变得更受欢迎。
  • Mozilla的解释很有意义

因此,我从“快速设置”指南开始。 看起来真的很容易。 比OpenID或OAuth身份验证容易得多–您无需在任何地方注册任何内容,不需要第三方库来处理服务器上的验证,并且您无需学习复杂的身份验证流程,因为该流程很简单:

  1. 用户单击登录按钮
  2. 出现一个弹出窗口
  3. 如果未通过Persona认证,则提示用户注册
  4. 如果通过Persona进行了身份验证,则提示用户批准对该站点的身份验证
  5. 弹出窗口关闭,页面重定向/刷新-用户现在已登录

当然,它不是那么简单,但是只有几件事需要注意,本教程中没有提到。 因此,让我们一步一步地遵循官方教程,并在每一点上进行扩展(使用的服务器端语言是Java,但它很简单,您可以使用任何语言来完成)

1.包括.js文件-简单。 建议从Mozilla服务器获取js文件,而不是将其存储在本地,因为它可能会更改(例如,为了修复错误)。 如果将js文件合并到一个文件中(为了加快页面加载速度)可能会比较棘手,但是您的机制可能允许加载远程js文件。

2.登录和退出按钮。 这看起来也很容易。 最好有条件地添加注销处理程序–仅当用户已使用Persona登录时(而不是您的站点支持的其他身份验证方法)

3.侦听身份验证事件。 建议将监听事件放在所有页面上(例如,包含在标题模板中)。 但是这里有一个问题。 如果您的用户已经在Persona中进行了身份验证,但是他的会话在您的站点上已过期,则脚本将自动登录该用户。 这将需要在页面加载后的几秒钟内重新加载页面。 这并不一定是您或用户想要的-例如,在我的情况下,这可能意味着他们刚刚播放的曲目由于页面刷新而中断。 当然可以使用AJAX来完成,但是当UI中的某些内容没有明显原因发生更改时,肯定会造成混乱。 下面,我将显示针对此问题的修复程序。 此外,可能并非到处都需要注销监听器-据我了解,如果您已注销Persona,它将自动注销用户。 这可能不是您想要的-例如,用户可能希望保留一些打开的选项卡,其中包含一些注销后无法访问的文档。

4.验证服务器上的断言。 在这里,您可能需要第3方库来调用验证端点并解析json结果,但是这些是您可能已经包含的非常标准的库。

现在,如何解决自动身份验证的问题? 声明一个新变量userRequestedAuthentication ,该变量保存身份验证是由用户显式发起还是由用户自动发起。 在登录按钮中,单击处理程序,将该变量设置为true 。 这是js代码的样子(顺便说一句,我认为可以将代码放在document.ready()中,而不是直接放在script标记中。假设您以后需要在处理程序方法中使用一些DOM资源,页面已完全加载。另一方面,这可能会减慢该过程的速度)。 请注意,您可以在所有页面上包括一个空的onlogin处理程序,并且仅在身份验证页面上具有完整的处理程序。 但是,鉴于登录按钮位于主页上,或带有javascript模态窗口显示,因此可以在任何地方/在多个页面上都可以使用。

<script type='text/javascript'>var loggedInUser = ${context.user != null ? ''' + context.user.email + ''' : 'null'};var userRequestedAuthentication = false;navigator.id.watch({loggedInUser : loggedInUser,onlogin : function(assertion) {$.ajax({type : 'POST',url : '${root}/persona/auth',data : {assertion : assertion, userRequestedAuthentication : userRequestedAuthentication},success : function(data) {if (data != '') {window.location.href = '${root}' + data;}},error : function(xhr, status, err) {alert('Authentication failure: ' + err);}});},onlogout : function() {window.locaiton.open('${root}/logout');}});
</script>

如您所见,参数被传递到服务器端代码。 那里发生了什么?

@RequestMapping('/persona/auth')
@ResponseBody
public String authenticateWithPersona(@RequestParam String assertion,@RequestParam boolean userRequestedAuthentication, HttpServletRequest request, Model model)throws IOException {if (context.getUser() != null) {return '';}MultiValueMap<String, String> params = new LinkedMultiValueMap<>();params.add('assertion', assertion);params.add('audience', request.getScheme() + '://' + request.getServerName() + ':' + (request.getServerPort() == 80 ? '' : request.getServerPort()));PersonaVerificationResponse response = restTemplate.postForObject('https://verifier.login.persona.org/verify', params, PersonaVerificationResponse.class);if (response.getStatus().equals('okay')) {User user = userService.getUserByEmail(response.getEmail());if (user == null && userRequestedAuthentication) {return '/signup?email=' + response.getEmail();} else if (user != null){if (userRequestedAuthentication || user.isLoginAutomatically()) {context.setUser(user);return '/';} else {return '';}} else {return ''; //in case this is not a user-requested operation, do nothing}} else {logger.warn('Persona authentication failed due to reason: ' + response.getReason());throw new IllegalStateException('Authentication failed');}
}

逻辑看起来比您希望的更复杂,但是让我解释一下:

  • 正如您在javascript代码中看到的那样,空字符串表示“不执行任何操作”。 如果返回任何其他内容,则javascript将打开该页面。 如果不使用spring-mvc,则无需将其从方法中返回@ResponseBody字符串,而是将其写入响应输出流(或用php术语–将其回显)。
  • 首先,您检查系统中是否已经有经过身份验证的用户。 如果有,则什么也不做。 我不确定是否存在Persona在已通过身份验证的用户上调用“ onlogin”的情况,但是如果您使用其他身份验证选项,Persona将不会知道您的用户已使用Twitter登录。
  • 然后,您调用验证URL并将结果解析为JSON。 我已经使用过RestTemplate ,但是任何东西都可以使用RestTemplate ,URLConnection。 对于JSON解析,spring在后台使用了Jackson。 您只需要编写一个值对象,即可保存Persona可能返回的所有属性。 到目前为止,我只包括:状态,电子邮件和原因(杰克逊详细信息:ignoreUnknown = true,spring-mvc详细信息:您需要将FormHttpMessageConverter设置为RestTemplate )。 重要的是,“受众”参数必须是用户当前所在的域。 无论是否使用www,它都会有所不同,因此请对其进行重构,而不是对其进行硬编码或从属性中加载它。 即使您从www重定向到no-www(反之亦然),您仍应为测试而动态获取该URL –测试环境的URL与生产环境的URL不同。
  • 如果Persona身份验证为“可以”,则您尝试在数据库中查找具有该电子邮件的用户。
  • 如果没有这样的用户,并且身份验证操作已手动触发,则将用户发送到注册页面并提供电子邮件作为参数(您也可以在http会话中进行设置,以使用户无法对其进行修改)。 然后,注册页面会询问其他详细信息-名称,用户名,出生日期或您认为合适的任何信息(但请尽量减少-最好仅是全名)。 如果仅需要电子邮件地址,而无需其他任何内容,则可以跳过注册页面并强制注册用户。 注册完成后,您登录用户。 请注意,如果您已将电子邮件存储在会话中(即用户无法从注册页面修改它),则可以跳过确认电子邮件-Persona已确认该电子邮件
  • 如果您的数据库中有该电子邮件的用户,请检查该用户是否已请求该操作,或者是否已(通过注册页面中的复选框)指示他要自动登录。考虑–应该询问用户,还是应该始终将其设置为true或false? 我已经添加了复选框。 如果应该进行登录,则在会话中设置用户并重定向到home(或上一页,或“用户home”的任何页面)(“ context”是会话范围的bean。您可以将其替换为session.setAttribute('user', user) )。 如果身份验证尝试是自动的,但用户不希望这样做,则不执行任何操作。 最后一个“ else”是针对用户在您的站点上没有帐户并且触发了自动身份验证的情况–在这种情况下不执行任何操作,否则最终将无休止地重定向到注册页面
  • 如果身份验证失败,请务必记录原因-然后您可以通过查看日志来检查一切是否正常

使用电子邮件作为唯一标识符( 使数据库列唯一 )的一个很酷的副作用是,如果稍后将Persona添加到您的站点,即使用户以其他方式注册(例如,facebook或常规注册),用户也可以使用它登录。 因此,他们可以将密码设置为长而难以记住的密码,并仅使用Persona继续登录。

我从实现中省略的细节很简单:注册页面只是收集字段并将其提交给/ completeRegistration处理程序,该处理程序将新用户存储在数据库中。 / logout网址仅清除会话(如果存储了cookie,则清除cookie)。 顺便说一句,如果启用了自动登录,并且Persona是您唯一的身份验证方法,则可能不需要存储cookie来保持会话过期后仍保持用户登录状态。

总体而言,即使我提出了要点,实现也仍然很简单。 女神异闻录看起来很棒,我希望很快能在更多站点上看到它。

参考: Bozho的技术博客博客上的JCG合作伙伴 Bozhidar Bozhanov的 Mozilla Persona身份验证用户指南 。

翻译自: https://www.javacodegeeks.com/2012/12/a-guide-to-authenticating-users-with-mozilla-persona.html

国外persona用户画像

国外persona用户画像_使用Mozilla Persona验证用户的指南相关推荐

  1. 国外persona用户画像_使用Mozilla Persona对用户进行身份验证

    国外persona用户画像 In this article we'll see how to use the new, future-ready distributed authentication ...

  2. 用户画像_什么是“用户画像”?如何利用用户画像进行精准营销?

    1.什么是"用户画像" 所谓的用户画像,简单来说就是根据用户社会属性.生活习惯和消费行为等信息而抽象出的一个标签化的用户模型. 用户画像,即用户信息标签化,就是企业通过收集与分析消 ...

  3. 银行客户用户画像_太瑞基因商学院:如何构建客户360°画像?

    一.何为客户画像 用户的个体画像是指根据用户的行为,抽取出典型特征,形成了一个用户的个体画像.个体画像认为每个客户都有自己独特的需求和兴趣,所以,可以将单个客户视为独立的市场,并据此提供不同的服务,或 ...

  4. 深度学习 用户画像_终于等到你—用户画像解决方案课程上线了!

    原标题:终于等到你-用户画像解决方案课程上线了! 用户画像解决方案课程上线啦! 讲师说: 规划了许久的用户画像解决方案课程终于上线啦.这套课程全部从实际工程开发.应用的角度出发,可操作性.落地性强. ...

  5. python用户画像_大数据-用户画像DMP

    描述 大数据-用户画像DMP --小树老师 更多好课 大数据用户画像系统课程一.项目概述目前推广平台仅在投放端提供了有限的定向能力,广告主没有足够的流量抓手,无法满足大中型广告主的营销目标.画像系统提 ...

  6. 什么叫大数据人物画像_大数据下的用户画像全解析 | 都在说用户画像,你真的了解透了吗?...

    版权来源:莲子数据,由莲子数据综编而成 版权归原作者所有,如涉及版权问题,请联系微信后台协商. 什么是用户画像? 在互联网逐渐步入大数据时代后,不可避免的给企业及消费者行为带来一系列改变与重塑.其中最 ...

  7. 这样构建的用户画像!想不懂你的用户都难

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 身无彩凤双飞翼,心有灵犀一点通. ...

  8. 如何有效构建用户画像,如何更新你的用户画像

    用户画像 有过一次网购经历后,下次登陆该网站,会弹出各种同类型替代商品或者互补商品的推荐:成为某品牌的注册会员,特殊的日子(会员日.生日)经常会收到品牌商发来的通知(祝福)短信或者邮件.这一切都是精准 ...

  9. 【大数据、数据挖掘、数据分析】用户画像是什么?如何制作用户画像?

    文章目录 什么是用户画像 用户画像的八要素 用户画像的优点 如何制作用户画像 用户画像,作为一种勾画目标用户.联系用户诉求与设计方向的有效工具,用户画像在各领域得到了广泛的应用. 用户画像最初是在电商 ...

最新文章

  1. 一文读懂语音识别技术原理
  2. HyperWorks2020中文版
  3. 锤子科技犯过的构图错误你一定也犯过
  4. Ubuntu 16.04 下部署Node.js+MySQL微信小程序商城
  5. js 获取session_Python实战案例:这是你见过的最详细的JS加密登录某博
  6. bigint最大有多少位_《追光吧哥哥》21位艺人靠实力成团?不见得,节目赛制本不公平...
  7. scala 高阶函数学习
  8. python 线性拟合 图_python线性拟合
  9. WLAN配置实例(二)——三层组网隧道转发
  10. SharePoint2013 App 开发中 自定义网站栏,内容类型,列表。
  11. 联想小新打印机M7268W固件升级步骤
  12. DatePicker 设置最小日期是当前时间报错:java.lang.IllegalArgumentException: fromDate:xxx does not preced toDate: xx
  13. 锐捷无线AC基础命令
  14. 人类最早计算机阿西莫夫,“人类先知”阿西莫夫50年前的2014年6大预言
  15. php微信客服接口,微信公众平台开发:多客服接口说明
  16. php+生成条形码18位,php实现在线生成条形码示例分享(条形码生成器)
  17. babel-polyfill解决vue框架项目IE无法打开问题
  18. 小米手机开机自启动软件及定时开关机
  19. 物联网端-云一体化应用管理解决方案
  20. 高德地图实现昼夜、卫星图切换

热门文章

  1. Oracle入门(十四.17)之procedure传递参数
  2. 集合总结(Collection)
  3. Servlet之javaweb应用(二)
  4. C++实现字符串的拼接
  5. 第4步 tomcat配置中文字符集 启动Tomcat  网页乱码
  6. wireshark tcp抓包分析_网络分析系列之八_使用Wireshark抓包
  7. python怎么用for循环找出最大值_用for循环语句写一个在输入的十个数字中求最大和最小值的python程序应该怎么写?...
  8. How to install plugin for Eclipse from .zip
  9. 关于Object.clone克隆方法的测试
  10. java分页中显示更多_早期更多失败– Java 8