twilio_15分钟内使用Twilio和Stormpath在Spring Boot中进行身份管理

twilio

建筑物身份管理,包括身份验证和授权? 尝试Stormpath! 我们的REST API和强大的Java SDK支持可以消除您的安全风险,并且可以在几分钟内实现。 注册 ,再也不会建立auth了!

今天,不到30秒左右的时间,我就能建立一个Twilio帐户并使用httpie向自己发送一条短信。 再花几分钟的时间(少于5分钟),我有一个Spring Boot应用程序在做同样的事情。

在大约同样的五分钟内,您可以使用Stormpath的身份管理作为服务平台进行设置,并学习热衷于身份验证。

我们真正生活在非我的计算机(云)服务的黄金时代。

您可以想象在过去15年中使用计算机或其他设备所做的任何事情,现在您可以注册并在几分钟内获得概念证明。 我记得大约在2007年的某个时候(发布iPhone 1之后)与SMS经纪人进行了交谈。 在完成一捆文书工作之后,等待了大约四个月的时间,并且花了大笔钱,我们准备使用SMS网关编写代码。 那时,这是一些不可思议的东西。

曾经尝试推出自己的身份管理吗? 你给哈希加盐了吗? 或者,只需接受它-您与当时的其他所有人一样以纯文本形式存储密码。

在本文中,我们将把Stormpath和Twilio放在一起。 情况如下:当用户从新设备登录时,我们希望向他们发送一条SMS通知以告知他们。 今天,这是使人们了解其帐户活动的一种常见做法。 如果我收到新地址登录的通知,但不是我,那么我知道我的帐户已被盗用。

twilio投机白1024x388

为了演示的目的,我们将考虑从新设备访问新的IP地址。

这篇文章的代码可以在这里找到。

设置风暴路径

第一步是创建一个Stormpath帐户。 您可以在此处关注我们的快速入门文档。 这些是基本步骤:

  • 在Stormpath.com注册
  • 点击确认电子邮件中的链接
  • 创建一个API密钥以用于API访问(将其保存到: ~/.stormpath/apiKey.properties

设置Stormpath Spring Boot集成

此示例的源代码可以在此处找到。

现在,不用担心Twilio的东西-默认情况下它是禁用的。 在下一部分中,我们将集成并启用Twilio。

通过Stormpath Spring Boot集成,可以轻松地在用户登录之前和之后触发其他操作。这是我们以后用来发送Twilio消息的机制。 现在,我们仅要确保登录后处理程序正在运行。

要使用Stormpath Spring Boot集成,您只需要包含一个依赖项:

<dependency><groupId>com.stormpath.spring</groupId><artifactId>stormpath-thymeleaf-spring-boot-starter</artifactId><version>${stormpath.version}</version>
</dependency>

在这种情况下,我们将使用Spring Boot + Web MVC + Thymeleaf集成,以便我们可以返回Thymeleaf模板。

要设置我们的postLoginHandler ,我们只需要创建一个暴露一个bean的Spring Boot配置:

@Configuration
public class PostLoginHandler{...@Bean@Qualifier("loginPostHandler")public WebHandler defaultLoginPostHandler() {return (HttpServletRequest request, HttpServletResponse response, Account account) -> {log.info("Hit default loginPostHandler with account: {}", account.getEmail());return true;};}
}

您可以像这样启动Spring Boot应用程序:

mvn clean install
mvn spring-boot:run

现在,您可以浏览到: http://localhost:8080/register在Stormpath中创建一个帐户。 然后,您可以浏览到: http://localhost:8080/login 。 您应该在日志输出中看到以下内容:

2016-09-14 22:37:18.078  ... : Hit default loginPostHandler with account: micah@stormpath.com

晕! 我们的登录后挂钩正在运行。

在此示例中,我们正在建模的用例是每当用户从新位置登录时向用户发送文本消息(SMS)。 为此,我们需要用户的电话号码。 我们还需要存储他们从其登录的位置的数组,以便我们确定他们是否从新位置登录。

输入Stormpath CustomData 。 我们很早就知道我们无法捕获客户可能拥有的用户数据的所有用例。 因此,我们为每个一流的Stormpath对象(包括用户帐户)附加了10MB的自由格式JSON数据。 那就是CustomData

我们像这样存储用户的信息:

{"loginIPs": ["0:0:0:0:0:0:0:1","104.156.228.126","104.156.228.136"],"phoneNumber": "+15556065555"
}

这是Stormpath管理控制台中的外观:

54721858

一旦我们将Twilio应用于组合中,我们将回到如何设置CustomData方式。

设置Twilio

Twilio的快速入门可以使您快速启动并运行。

基本步骤如下:

  • 输入一些基本的注册信息
  • 输入你的电话号码
  • 提供Twilio电话号码
  • 测试您可以从Twilio电话号码向您的电话号码发送消息

确保您运行测试并且可以发送消息。 您可以使用curl或httpie从命令行自己进行测试 :

http -f POST \
https://api.twilio.com/2010-04-01/Accounts/<account sid>/Messages.json \
To=<recipient +1...> From=<your twilio phone # - +1...>  Body="Hello there..." \
--auth <account sid>:<auth token>

现在您知道可以使用您的Twilio帐户了,将它作为依赖项添加到Spring Boot应用程序中很容易:

<dependency><groupId>com.twilio.sdk</groupId><artifactId>twilio-java-sdk</artifactId><version>(6.0,6.9)</version>
</dependency>

绑在一起

之前,我们将Spring Boot应用程序设置为在用户成功登录后执行一项操作。该操作只是为了记录一些信息。 现在,我们将集成使用相同的登录后处理程序发送Twilio消息的功能。

@Bean
@Qualifier("loginPostHandler")
public WebHandler twilioLoginPostHandler() {return (HttpServletRequest request, HttpServletResponse response, Account account) -> {log.info("Account Full Name: " + account.getFullName());CustomData customData = account.getCustomData();String toNumber = (String) customData.get(phoneNumberIdentifier);List<String> loginIPs = getLoginIPs(customData);String ipAddress = getIPAddress(request);if (loginIPs.contains(ipAddress)) {// they've already logged in from this locationlog.info("{} has already logged in from: {}. No message sent.", account.getEmail(), ipAddress);} else {boolean messageSent = TwilioLoginMessageBuilder.builder().setAccountSid(twilioAccountSid).setAuthToken(twilioAuthToken).setFromNumber(twilioFromNumber).setToNumber(toNumber).send("New login for: " + account.getEmail() + ", from: " + ipAddress);// only save the ip address if the twilio message was successfully sentif (messageSent) {saveLoginIPs(ipAddress, loginIPs, customData);}}return true;};
}

第8行和第9行检索用户的电话号码和用户以前登录过的地址的列表。 它从用户的CustomData提取此信息。

假设他们正在从新位置登录,则第18行将新地址保存回CustomData ,第20行触发Twilio消息。

TwilioLoginMessageBuilder在示例中定义,并使用一个流畅的界面。

上面第26行使用的send方法首先检查以确保正确配置了Twilio,如果是,则尝试发送消息:

TwilioRestClient client = new TwilioRestClient(accountSid, authToken);List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("To", toNumber));
params.add(new BasicNameValuePair("From", fromNumber));
params.add(new BasicNameValuePair("Body", msg));MessageFactory messageFactory = client.getAccount().getMessageFactory();
try {Message message = messageFactory.create(params);log.info("Message successfuly sent via Twilio. Sid: {}", message.getSid());return true;
} catch (TwilioRestException e) {log.error("Error communicating with Twilio: {}", e.getErrorMessage(), e);return false;
}

让我们启动该应用程序,看看它的实际效果!

mvn clean installTWILIO_ACCOUNT_SID=<your twilio account sid> \
TWILIO_AUTH_TOKEN=<your twilio auth token> \
TWILIO_FROM_NUMBER=<your twilio phone number> \
TWILIO_ENABLED=true \
java -jar target/*.jar

点击前门http://localhost:8080 ,您就有机会登录。如果查看日志,您会发现第一次登录时,您没有收到任何消息,因为没有您备案的电话号码。

7161604

15149852

2016-09-15 16:48:31.621  INFO: Account Full Name: micah silverman
2016-09-15 16:48:31.750  WARN: No toNumber set. Cannot proceed.

接下来要做的是设置电话号码:

34509960

现在,您可以注销并再次登录,您应该会收到Twilio通知:

22712755

2016-09-15 16:53:44.599  INFO: Account Full Name: micah silverman
2016-09-15 16:53:46.080  INFO: Message successfully sent via Twilio. Sid: SM9cd7fdfa3f8f463dbdd8f16662c13b5b

51977529

协同增效!

在本文中,我们采用了Stormpath的登录后处理程序功能,并将其与Twilio的SMS功能结合使用,以产生新的功能,这要比这两个平台分别可以完成的功能大。

绝对是服务的黄金时代。

在本文的代码存储库中,还使用了更多的Spring Boot魔术,包括基于配置设置动态加载defaultLoginPostHandlertwilioLoginPostHandler 。 要使用Twilio处理程序,只需在application.properties文件中设置twilio.enabled=true属性。

现在,继续将一些服务粘合在一起,以获得乐趣和收益!

学到更多

有兴趣了解更多有关使用Spring Boot和Stormpath进行用户身份验证的信息吗? 我们还有其他一些很棒的资源可供您查看:

  • Spring Boot和Stormpath的OAuth 2.0令牌管理
  • 使用Spring Boot和Heroku在20分钟内完成Java的单点登录
  • 5个构建Spring Boot API的实用技巧

建筑物身份管理,包括身份验证和授权? 尝试Stormpath! 我们的REST API和强大的Java SDK支持可以消除您的安全风险,并且可以在几分钟内实现。 注册 ,再也不会建立auth了!

立即注册按钮

翻译自: https://www.javacodegeeks.com/2016/10/identity-management-spring-boot-twilio-stormpath-15-minutes.html

twilio

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335414.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity webgl读写txt文件_python Files文件读写操作

今天学习python的Files文件读写操作&#xff0c;并记录学习过程欢迎大家一起交流分享。首先新建一个文本文件test.txt&#xff0c;内容如下:hello worldhello youhello mehello pythonhello universe然后新建一个python文件命名为py3_file.py&#xff0c;在这个文件中进行操作代…

垃圾收集 java_Java的内置垃圾收集如何使您的生活更美好(大部分时间)

垃圾收集 java通过从您的应用程序学习企业APM产品&#xff0c;发现更快&#xff0c;更有效的性能监控。 参加AppDynamics APM导览&#xff01; “无需为用户编写将寄存器返回到自由存储列表的程序。” 这条线&#xff08;以及随后的十几条线&#xff09;被埋在约翰麦卡锡&…

python函数的使用方法_百度资讯搜索_python函数的使用方法

金生水起程序猿 2020年11月22日 11:23函数语法格式及调用参数:默认值、元组和字典可变参数的使用全局变量和局部变量作用域,局部变量如何升级为全局变量函数是可重复使用的,实现单一功能的代码块。可以把项...百度快照金生水起程序猿 2020年11月22日 12:13函数类型定义:python中…

red hat 4.1.2_安装Red Hat Container Development Kit 2.2版本

red hat 4.1.2当应用程序开发人员或架构师负责探索容器化应用程序提供的可能性时&#xff0c;没有比“红帽容器开发套件”&#xff08;CDK&#xff09;容易的了。 Red Hat CDK具有本地OSX&#xff0c;Linux或Windows环境所需的所有Cloud工具&#xff0c;并且已预先配置了一些容…

高斯背景建模 matlab,高斯背景建模整理 – 要饭的

OpenCV 中高斯背景建模相关论文BackgroundSubtractorMOG:Paper : An Improved Adaptive Background Mixture Model for Real-time Tracking with Shadow DetectionWebsite : http://personal.ee.surrey.ac.uk/Personal/R.Bowden/publications/avbs01/avbs01.pdf创新点 &#x…

apache ignite_使用Apache Storm和Apache Ignite进行复杂事件处理(CEP)

apache ignite在本文中&#xff0c; “使用Apache Ignite进行高性能内存计算”一书的作者将讨论使用Apache Strom和Apache Ignite进行复杂的事件处理。 本文的一部分摘自 书 。 术语“复杂事件处理”或CEP没有广泛或高度接受的定义。 Wikipedia的以下引用可以简要描述什么是复…

tpm php,TPM系列

近来一直在整理资料&#xff0c;刚好看到有比较详细的介绍&#xff0c;就发扬一下“拿来主义”吧&#xff1a;)顺便鄙视一下某安全网站转载我的博客很乱&#xff1a;(1、安装环境准备1.1内核Linux内核2.6.12版本及以上&#xff0c;提供了对tpm芯片的支持&#xff0c;下载地址&a…

zookeeper 日志查看_每天使用的注册中心zookeeper,流量暴涨怎么办?

通过本文能学习什么&#xff1f;初步了解zookeeper监控如何运用tcpdump Wireshark抓包分析Dubbo在zookeeper上节点设计如何查看zookeeper节点快照背景zookeeper作为dubbo的注册中心&#xff0c;承载着服务的基础信息(方法名&#xff0c;分组&#xff0c;版本等)&#xff0c;服…

javaone_JavaOne 2016 Essentials:您不应该错过的7个事件和会话

javaone参加JavaOne吗&#xff1f; 确保您不会错过这些活动 又到了每年的这个时候。 旧金山一年一度的Java假期即将来临&#xff0c;全市各地举行了超过400场会议和活动。 随着所有这些丰富的内容和新体验同时发生&#xff0c;很容易就无法跟踪正在发生的事情。 在这篇文章中…

python比较两张图片是否一样_opencv_判断两张图片是否相同

python金融风控评分卡模型和数据分析微专业课&#xff08;博主亲自录制视频&#xff09;&#xff1a;http://dwz.date/b9vv本文为原创,转载请注明&#xff0c;作者 231469242qq.com OpenCV介绍 OpenCV是一个基于BSD许可&#xff08;开源&#xff09;发行的跨平台计算机视觉库&a…

bat 存储过程返回值_为什么不推荐使用存储过程?

之所以有这个题目&#xff0c;我既不是故意吸引眼球&#xff0c;也不想在本文对存储过程进行教科书般论述。最近项目中遇到的存储过程问题&#xff0c;让我想起了去年在武汉出差时一位同事的发问&#xff1a;我觉得存储过程挺好用的&#xff0c;为什么你不建议用&#xff1f;当…

Mac下载JDK/安装JDK/卸载JDK

文章目录下载JDK安装JDK配置环境变量卸载JDK下载JDK 访问这个地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#java18 进入下载JDK的界面后&#xff0c;下拉界面到下图所示的位置&#xff1a; 或者访问这个地址&#xff1a;https://www.oracle.com/cn/…

kettle 只有一个输入记录期待设置变量并且至少已经收到2个变量._OPNET学习笔记2...

双击主机网络打开对应的节点模型&#xff0c;从图中可以看到网络的分层&#xff1a;应用层&#xff0c;传输层&#xff0c;网络层&#xff0c;链路层&#xff1b;其中在传输层中我们用到的主要是UDP&#xff08;对实时性要求比较高&#xff09;&#xff0c;网络层又包括IP封装层…

python tkinter控件_Python3 tkinter基础 Label pack 设置控件在窗体中的位置

? python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 conda : 4.5.11 type setting : Markdown ? 普通布局 code """ Author : 行初心 Date : 18-10-1 Blog : www.cnblogs.com/xingchuxin GitHub : github.com/GratefulHeartCoder ""…

oracle的mins,分钟的英文缩写,10min还是10mins!

请问,分钟的英文缩写是min,小时的英文缩写是h,还是hr?秒的..._知乎[图文]时间分钟的英文缩写是什么minutes 10 minutes意思是十分钟的&#xff0c;比如说路程 10minutes就是十分钟 没有10minutes这种表达[图文]分钟 min【minute】 超过多少分钟就用介词past表示超过 还差几分钟…

postman测试工具,如何对参数使用md5加密

先创建环境变量password&#xff0c;并定义了变量值&#xff08;例如&#xff1a;123456&#xff09;访问登录接口通常是post提交登录用户名称和登录密码&#xff0c;且以json格式提交&#xff0c;所以在body-raw-json&#xff0c;填写json串如下图所示&#xff1a; 接着在pre-…

开源java性能分析工具_Java性能监控:您应该知道的5个开源工具

开源java性能分析工具鲜为人知但有用&#xff1a;开源应用程序性能监视的状态 对于任何应用程序来说&#xff0c;最重要的事情之一就是性能。 我们要确保用户获得他们能获得的最佳体验&#xff0c;并想知道我们的应用已启动并正在运行。 这就是为什么我们大多数人至少使用一种…

cmd编译可以通过执行没有结果_Go语言是如何完成编译的

Go语言是一门需要编译才能运行的编程语言&#xff0c;也就说代码在运行之前需要通过编译器生成二进制机器码&#xff0c;随后二进制文件才能在目标机器上运行&#xff0c;如果我们想要了解Go语言的实现原理&#xff0c;理解它的编译过程就是一个没有办法绕过的事情。预备知识想…

如何通过postman测试需要登录授权的接口

思路 请求需要登录授权的接口&#xff0c;就意味着你要传token给接口&#xff0c;所以请求接口&#xff08;要测试的接口&#xff09;之前就要先获取token&#xff0c;因为登录成功后服务端才会返回token&#xff0c;而token又设置了时效&#xff0c;所以每次请求接口&#xf…

wordpress linux 目录,快速搭建WordPress(Linux)

作者&#xff1a;彭济环境要求一、配置LAMP(LinuxApacheMysqlPHP)1、安装apachesudo apt-get install apache2 //安装apache2apache2 -v //查看版本网页访问本机ip地址&#xff0c;查看是否安装成功2、安装phpsudo apt-get install php //安装phpphp -v //查看版本sudo apt-get…