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通知以告知他们。 今天,这是使人们了解其帐户活动的一种常见做法。 如果我收到新地址登录的通知,但不是我,那么我知道我的帐户已被盗用。
为了演示的目的,我们将考虑从新设备访问新的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管理控制台中的外观:
一旦我们将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
,您就有机会登录。如果查看日志,您会发现第一次登录时,您没有收到任何消息,因为没有您备案的电话号码。
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.
接下来要做的是设置电话号码:
现在,您可以注销并再次登录,您应该会收到Twilio通知:
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
协同增效!
在本文中,我们采用了Stormpath的登录后处理程序功能,并将其与Twilio的SMS功能结合使用,以产生新的功能,这要比这两个平台分别可以完成的功能大。
绝对是服务的黄金时代。
在本文的代码存储库中,还使用了更多的Spring Boot魔术,包括基于配置设置动态加载defaultLoginPostHandler
或twilioLoginPostHandler
。 要使用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
twilio_15分钟内使用Twilio和Stormpath在Spring Boot中进行身份管理相关推荐
- 15分钟内使用Twilio和Stormpath在Spring Boot中进行身份管理
建筑物身份管理,包括身份验证和授权? 尝试Stormpath! 我们的REST API和强大的Java SDK支持可以消除您的安全风险,并且可以在几分钟内实现. 注册 ,再也不会建立auth了! 今天 ...
- 计算机网络时间校时,若当前系统时间与标准时间误差在( )分钟内,需进行校准。出处:《计算机化系统时钟校准管理规程》MS-E050。...
若当前系统时间与标准时间误差在( )分钟内,需进行校准.出处:<计算机化系统时钟校准管理规程>MS-E050. 更多相关问题 发生人工费索赔时能按日计工费计算的是( ). 工业的飞速进步使 ...
- 具有Stormpath和Spring Boot的OAuth 2.0令牌管理
建筑物身份管理,包括身份验证和授权? 尝试Stormpath! 我们的REST API和强大的Java SDK支持可以消除您的安全风险,并且可以在几分钟内实现. 注册 ,再也不会建立auth了! OA ...
- mysql的每隔1分钟定时_简单易用,spring boot集成quartz,实现分布式定时任务
什么是quartz? Quartz是一个完全由 Java 编写的开源任务调度框架. 我们经常会遇到一些问题: 想每个月27号,提醒信用卡还款: 想每隔1小时,提醒一下,累了,站起来活动一下: 想每个月 ...
- 在spring boot中三分钟上手apache顶级分布式链路追踪系统skywalking
skywalking在apache里全票通过成为了apache顶级链路追踪系统 项目地址:github.com/apache/skyw- 官方文档:github.com/apache/skyw- 虽然 ...
- 由浅入深分布式(5)dubbo提供者用内网地址注册provider以及 spring boot admin client用主机名注册spring boot admin server
之前遇到过dubbo提供者用内网地址注册provider的问题 当时改了host文件成功了 但是没有想为什么会有这个问题 现在使用spring boot admin 来监控spring boot项目出 ...
- java heroku_使用Spring Boot和Heroku在20分钟内完成Java的单点登录
java heroku 建筑物身份管理,包括身份验证和授权? 尝试Stormpath! 我们的REST API和强大的Java SDK支持可以消除您的安全风险,并且可以在几分钟内实现. 注册 ,再也不 ...
- 使用Spring Boot和Heroku在20分钟内完成Java的单点登录
建筑物身份管理,包括身份验证和授权? 尝试Stormpath! 我们的REST API和强大的Java SDK支持可以消除您的安全风险,并且可以在几分钟内实现. 注册 ,再也不会建立auth了! 大规 ...
- 五分钟内搭建的混沌电路
简 介: 针对一种简单的混沌电路进行测试,没有能够复现电路的工作状态.具体原因尚未清楚. 关键词: 混沌电路,相移单管电路 #mermaid-svg-QPl6WYe8NnE6m9yt .label{f ...
最新文章
- java的classpath配置文件_Java Classpath及.properties配置文件
- ZOJ18th省赛 Lucky 7
- 如何删除链表的最后一个节点_面试:删除链表的节点
- git:致命的:无法从远程存储库读取
- 拓端tecdat|Matlab中的偏最小二乘法(PLS)回归模型,离群点检测和变量选择
- 弹性盒怎么实现左边图片右边文字_【粉丝问题】如何用ps修改照片中的文字数字?...
- 在PreferenceScreen加入自定义布局
- advapi32 无法定位_无法定位程序输入点RegSetKeyValueA 于动态链接库 ADVAPI32.dll上 解决方案...
- 河北大学计算机系院长,徐建民(河北大学网络空间安全与计算机学院教授)_百度百科...
- Python-Scrapy 获取历史双色球开奖号码
- ZZULIOJ:1156: 单数变复数
- python新手入门程序——实验5
- Linux的快速使用_jdk安装_tomcat安装_mysql安装-尚学堂~百战程序员学习笔记
- 基于jws发布webservice服务
- matlab-高数 diff 求在(x0,y0)处偏导数 数值
- FPGA的NIOS-||的开发入门
- git commit 、CHANGELOG 和版本发布的标准自动化
- Typora收费了, 还有哪些好用的markdown工具
- StringTokenizer的用法及示例
- 言语如何成为交互设计的基础
热门文章
- jzoj6342-[NOIP2019模拟2019.9.7]Tiny Counting【树状数组,容斥】
- P2742-二维凸包/圈奶牛Fencing the Cows【凸包】
- 【2018.5.12】模拟赛之一-ssl2413 排名【玄学】
- 数数题(计数类 DP)做题记录
- 纪中A组模拟赛总结(2021.7.13)
- 子数整数(luogu 1151)
- 初一模拟赛总结(6.6 my brother高考前一天,加油!(。・`ω´・。))
- Spark SQL(八)之基于物品的相似度公式
- Spring Boot面试题(2020最新版)
- 汇编语言(三十二)之读写文件