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

建筑物身份管理,包括身份验证和授权? 尝试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 location
            log.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 sent
            if (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 install
 
TWILIO_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进行用户身份验证的信息吗? 我们还有其他一些很棒的资源可供您查看:

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

立即注册按钮

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值