使用Spring Boot和Heroku在20分钟内完成Java的单点登录

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

大规模更新

我最初为本文撰写的代码更适合非Spring Boot环境。

Stormpath为其IDSite服务现有的Spring Boot集成使为其编写代码变得轻而易举 。 它利用了Spring Boot必须提供的所有自动配置。

如果您是新手,请继续阅读。 如果您以前阅读过它,请跳至“ 更新您的Spring Boot Webapp”部分。 您将看到RestrictedController从40行减少到15行,从4种方法减少到1行。

主赛事–轻松单点登录

我喜欢Java如何保持自我创新以保持最新和相关性(我可以听到我所有的Node.js和Ruby朋友吟)。 支持Java的生态系统也在跟上新的发展。 如今,就像在Python或Node.js中一样,构建,测试和部署丰富的Java Web应用程序变得如此容易(越来越难了)。

其中之一就是Spring Boot,它使在几分钟内构建和启动Java Webapp成为现实。 Heroku对Java支持的关注也加快了步伐。

最后,Stormpath意味着开发人员不必构建身份验证和授权工作流。 Stormpath的身份API和单点登录功能( 通过IDSite )提供了现成的帐户注册,登录,电子邮件工作流以及跨应用程序的单点登录。 这些流程包括默认表单和视图,所有这些都是可定制的。

在这篇文章中,我们将把所有这些放在一起,并在20分钟内在您的应用程序中获得单点登录的额外好处。

继续阅读-滴答滴答!

这是本教程所需的先决条件:

  • 摇篮2.x
    • 在Mac上: brew install gradle
  • Heroku
  • 一个Stormpath帐户(我们还将在下面介绍)

注意 :您可以轻松使用Maven 。 如果您更喜欢此构建工具,则本文附带的源代码包括pom.xml

为了使其变得超级容易,我们在每个示例中都添加了一个方便的Heroku部署按钮,因此您可以立即看到它的运行情况。 如果您花了超过20分钟的时间,请在评论中告诉我们是什么阻止了您。 我们喜欢反馈。

启动Spring Boot – 5分钟教程

注意 :如果您已经对Spring Boot有所了解,则可以跳到下一部分。 在那里–我刚刚为您节省了5分钟。 别客气。

本节使用github存储库中的SpringBootBasic标签。

纽扣

Spring Boot使您能够启动一个功能全面的Java Web应用程序,就像启动一个简单的Java应用程序一样。 它具有main方法和所有内容。 例如, @SpringBootlApplication批注执行@Configuration @EnableAutoConfiguration@ComponentScan @EnableAutoConfiguration@ComponentScan批注(具有默认属性)在@EnableAutoConfiguration Spring应用程序中所做的所有操作。

令Spring Boot如此出色且如此轻松地工作的是Starter软件包,这些软件包增加了功能,包括默认配置。 我们将在Stormpath Spring Boot Thymeleaf Starter的所有Stormpath功能中进一步使用它们来创建新用户,登录和更改密码。 您要做的只是在build.gradlepom.xml文件中引用一个jar。

对于我们的基本示例,我们将包括核心Spring Boot Starter Web和Thymeleaf Spring Boot Starter。 Thymeleaf是现代HTML 5 Java模板引擎。

这是我们的build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.5.RELEASE")
    }
}
 
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'spring-boot'
 
group = 'com.stormpath'
version = '0.1.0'
 
sourceCompatibility = 1.8
targetCompatibility = 1.8
 
repositories {
    mavenCentral()
}
 
dependencies {
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version:'1.2.5.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf', version:'1.2.5.RELEASE'
}

要使我们的基本Spring Boot应用程序正常运行,我们还需要三个文件。

IDSiteDemoApplication.java是应用程序的入口点:

package com.stormpath.idsite_demo;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@SpringBootApplication
public class IDSiteDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(IDSiteDemoApplication.class, args);
    }
}

@SpringBootApplication批注设置了启动应用程序所需的所有配置。

HomeController.java映射URI并解析为Thymeleaf模板:

package com.stormpath.idsite_demo.controllers;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
 
@Controller
public class HomeController {
    @RequestMapping("/")
    public String home() {
        return "home";
    }
}

@Controller@RequestMapping批注将此类设置为控制器,并将其配置为处理/ URI上的请求。 只需将String home钩子返回到Thymeleaf模板体系结构中,即可将我们引到最终文件:

位于templates文件夹中的home.html是浏览至/时将呈现的模板:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
    <head>
        <th:block th:include="fragments/head :: head"/>
    </head>
    <body>
        <div class="container-fluid">
            <div class="row">
                <div class="box col-md-6 col-md-offset-3">
                    <div class="stormpath-header">
                        <img src="http://stormpath.com/images/template/logo-nav.png"/>
                    </div>
                    <h1>Hello!</h1>
                </div>
            </div>
        </div>
    </body>
</html>

注意 :您可能会注意到上面模板中的th:include指令。 这是Thymeleaf体系结构的一部分,用于将文件包含在其他文件中。 该示例的完整源代码包含templates/fragments/head.html文件。

那好吧 让我们通过启动最基本的Spring Boot应用程序来完善前5分钟。

gradle clean build可以解决问题。 然后: java -jar build/libs/idsite_demo-0.1.0.jar

build_it_one

为SpringBoot身份验证添加Stormpath

本节使用github存储库中的SpringBootStormpath标记。

纽扣

在本节中,我们将:

  • 创建一个Stormpath帐户
  • 生成Stormpath API密钥对
  • 将应用程序添加到您的Stormpath帐户
  • 更新您的Spring Boot网络应用程序以显示一些Stormpath应用程序信息
  • 点火并观看它的工作情况

创建一个Stormpath帐户

转到“风暴路径注册”页面 。 输入您的名字和姓氏,公司,电子邮件和密码。

spring-boot-heroku-register

单击注册。

点击收到的验证电子邮件中的链接。 然后,您将看到为您生成的租户名称。

spring-boot-heroku-login

登录。 做完了

注意 :有关多租户应用程序的更多信息,我们上面有一个方便的博客文章

生成Stormpath API密钥对

登录到Stormpath帐户后,您将看到以下屏幕:

弹簧启动heroku仪表板

单击Create API Key按钮。

api_key

单击Create API Key按钮并保存文件。

存储在该文件中的API密钥用于向Stormpath验证您的应用程序。 在该文件中,有一个apiKey.idapiKey.secret 。 您永远都不想暴露apiKey.secret 。 因此,例如,您永远不需要将api密钥文件签入git存储库。 稍后当我们部署到Heroku时,我将向您展示如何配置您的应用程序以使用api密钥,而不必将它们存储在git存储库中。

Stormpath使用详细记录的配置默认值,以使我们的API的使用变得异常简单。 这些默认值之一是api密钥文件位置。 Java SDK将自动在您的主目录中查找文件:

~/.stormpath/apiKey.properties

如果将下载的文件复制到该路径,则不需要其他配置即可从应用程序连接到Stormpath。

将应用程序添加到您的Stormpath帐户

返回管理控制台,点击“应用程序”标签。

应用领域

您会注意到已经存在两个应用程序: My ApplicationStormpath 。 他们在注册Stormpath时自动设置。 如果没有定义任何其他Stormpath应用程序,则Spring Boot应用程序不需要进一步的配置。 默认情况下,它将连接到已定义的“ My Application实例。

但是,这里的最终目标是获得一些Single Signon的好处,为此,我们需要多个应用程序才能登录。

因此,让我们创建另一个Stormpath应用程序。 单击Create Application按钮。

new_application

让我们在这里分解选项。

名称和(可选)描述不言自明。 而且,我们希望此应用程序已启用是有意义的。

默认情况下,“ Create new Directory复选框处于选中状态。 对于我们的示例,我未选中此选项。 相反,我已经选中了“将Map Account Stores to this Application复选框,并选择了“ My Application Directory 。 最后,我单击了“ DEFAULT ACCOUNT LOCATION和“ DEFAULT GROUP LOCATION单选按钮。

那么,这是怎么回事? Stormpath的组织方式,应用程序可以使用任意数量的目录作为其帐户存储。 Stormpath目录只是包含帐户和组的存储桶。 为了我们的目的,我们可以使用注册后为我们自动创建的目录My Application Directory 。 在下面的“奖励”部分,我将向您展示如何创建特定类型的目录,以将Google身份验证添加到您的应用中。 剧透警报:超级容易。

更新您的Spring Boot Webapp

让我们将基本的Spring Boot应用程序连接到Stormpath,以显示一些Stormpath应用程序信息。 这将为能够与ID网站服务集成奠定基础。

看看我们的HomeController

package com.stormpath.idsite_demo.controllers;
 
@Controller
public class HomeController {
    @Autowired
    Application app;
 
    @RequestMapping("/")
    public String home(Model model) {
        model.addAttribute("appName", app.getName());
        model.addAttribute("appDescription", app.getDescription());
 
        return "home";
    }
}

现在,我们利用了Spring的@Autowired功能,为我们提供了Stormpath Application对象的句柄。 使用它,我们在Model对象中设置应用程序的名称和描述,并将其传递给我们的模板。

这将我们带入下一个更改,即home.html Thymeleaf模板:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
    <head>
        <th:block th:include="fragments/head :: head"/>
    </head>
    <body>
        <div class="container-fluid">
            <div class="row">
                <div class="box col-md-6 col-md-offset-3">
                    <div class="stormpath-header">
                        <img src="http://stormpath.com/images/template/logo-nav.png"/>
                    </div>
                    <h1 th:inline="text">Hello! Welcome to App: [[${appName}]]</h1>
 
                    <h3 th:inline="text">[[${appDescription}]]</h3>
                </div>
            </div>
        </div>
    </body>
</html>

使用Thymeleaf表示法将信息拉出模型,我们引用了[[${appName}]][[${appDescription}]]

最后,我们将进行一个小(但功能强大)的更新以build.gradle文件。 我们正在更改此行:

compile group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf', version:'1.2.5.RELEASE'

对此:

compile group: 'com.stormpath.spring', name: 'spring-boot-starter-stormpath-thymeleaf', version:'1.0.RC4.5'

我们已经将Spring的Thymleaf Spring Boot Starter换成Stormpath的了。 这是很酷的一点:该Starter中包含了与Stormpath Java SDK交互所需的一切。

我们的应用程序文件中总共更改了7行,并且添加了一个文件application.properties以开始挂接到Stormpath。

构建您的Java Web应用程序

我们在这里需要的其他一点信息是您创建的Stormpath应用程序的URL。

您可以通过导航到“应用程序”,从管理仪表板中找到此文件。

application_id

假设您将api密钥文件放在~/.stormpath/apiKey.properties的默认位置,这是运行此示例所需的全部工作:

gradle clean build
STORMPATH_APPLICATION_HREF=https://api.stormpath.com/v1/applications/6bHOGj63WM8cfC2nhD3Pki \
  java -jar build/libs/idsite_demo-0.1.0.jar

当然,您需要放入自己的STORMPATH_APPLICATION_HREF

app_info

您可以看到浏览器中的页面现在正在显示来自我们创建的Stormpath应用程序的信息。

使用IDSite的Stormpath单点登录…

…你猜到了。 五分钟内。

本节使用github存储库中的SpringBootStormpathIDSite标记。

纽扣

您可能有向应用程序添加身份验证和授权的经验。 也许您是预先完成的。 也许那是您说过要达成的目标-最终。 无论哪种方式,这都很痛苦。 而且,它与您要解决的问题无关。 但是,这是至关重要且必要的。

在本节中,我们将添加以下功能:创建新用户,登录,将页面访问权限限制为仅那些已登录用户和更改密码。 并且,我们将以最少的编码和最少的配置来做到这一点。

标识站点配置

首先,我们将从管理控制台设置IDSite。 单击“ ID站点”选项卡。

id_site_1

滚动时,您会发现有许多字段带有标签Upgrade Required 。 基本ID网站功能可与我们的免费套餐一起使用,我们将在稍后看到。 具有自定义域或自定义用于身份验证的模板需要付费订阅。

在这里,我们只是要更新两个字段并保存设置。

id_site_2

为了安全起见,您必须指定一个允许与ID网站建立连接的URL列表。

在“ Authorized Javascript Origin URLs字段中输入http://localhost:8080

出于安全原因,您必须指定授权重定向URL的列表。

Authorized Redirect URLs字段中输入http://localhost:8080/并在另一行中输入http://localhost:8080/idSiteResult

单击Save按钮。 这就是配置ID站点以在应用程序中启用身份验证和授权所必需的。

让我们退后一步,用5分钟中宝贵的30秒时间来查看ID网站背后的机制。

当用户尝试访问您网站的受限区域时,如果他们尚未拥有有效的会话,他们将被重定向到您的ID网站。

他们将看到一个熟悉的登录表单,其中包含用于创建新用户和重置其密码的选项。

id_site_login

这个是从哪里来的? 这是魔术吗? 这是使用ID Site的一部分-通常通常自己编写的所有身份验证和授权流程。 不好。 (哎呀,这有点苛刻。但是,认真的说,由于身份验证代码实施不当,您多久阅读一次有关安全漏洞的信息?)

身份验证后,它们将被重定向回您指定的URL,并将能够访问该受限内容。

您的用户似乎完全熟悉此过程-甚至平凡。 您只需很少的配置或编码即可完成此任务。

更新您的Spring Boot Webapp

启用对您的Spring启动应用程序IDSite是在一个单一的财产处理application.properties 。 我们还将另外两条线来控制流。

stormpath.web.idSite.enabled = true
stormpath.web.login.nextUri = /restricted/secret
stormpath.web.logout.nextUri = /?status=logout

第1行为您的应用程序启用IDSite。 对。 这就是全部!

IDSite具有默认的标准身份验证流。 默认情况下,在验证用户身份之后, /login重定向到/ ,在会话被销毁后, /logout重定向到/login?status=logout

对于我们的应用程序,一旦用户通过身份验证,我们希望他们重定向回/restricted/secret 。 而且,一旦用户注销,我们将以状态logout将他们重定向回前门。 上面的第2行和第3行完成了此操作。

我们在home.html模板中添加了一行,以启动整个登录流程:

<a class="btn btn-success" href="/restricted/secret">Click here for a secret message.</a>

我们将在一个新的控制器中添加大约15行代码(总计)以挂接到ID Site。
让我们看一下该控制器RestrictedController.java

package com.stormpath.idsite_demo.controllers;
 
@Controller
public class RestrictedController {
    @Autowired
    Application app;
 
    @Value("#{ @environment['stormpath.sso.cross.link'] ?: '/' }")
    private String crossLink;
 
    @Value("#{ @environment['stormpath.sso.message.primary'] ?: 'Primary' }")
    private String messagePrimary;
 
    @Value("#{ @environment['stormpath.sso.message.secondary'] ?: 'Secondary' }")
    private String messageSecondary;
 
 
    @RequestMapping("/restricted/secret")
    public String secret(HttpServletRequest request, Model model) {
        Account account = AccountResolver.INSTANCE.getAccount(request);
 
        if (account == null) {
            return "redirect:/login";
        }
 
        model.addAttribute("appName", app.getName());
        model.addAttribute("crossLink", crossLink);
        model.addAttribute("messagePrimary", messagePrimary);
        model.addAttribute("messageSecondary", messageSecondary);
        return "restricted/secret";
    }
}

让我们分解一下:

第8、11和14行使用标准的Spring工具来注入值。

引用环境变量ala @environment['stormpath.sso.message.primary']提取在applications.properties中找到的属性。

这是最重要的部分:Stormpath具有用于将系统环境变量转换为应用程序环境变量的内置工具。 这使我们在诸如Heroku之类的部署环境中设置环境变量非常容易。

它是这样工作的:将系统环境变量转换为小写,并将下划线替换为句点。

因此, STORMPATH_SSO_MESSAGE_PRIMARY被转换为stormpath.sso.message.primary

crossLink用于单点登录的环境。 此变量保存指向IDSite中设置的另一个应用程序的受限页面的完全限定URL。

messagePrimarymessageSecondary用于设置在受限页面上显示的消息。

这三个变量使我们可以将相同的代码库部署到多个Heroku应用程序,并在受限页面上显示不同的消息。

以下是IDSite的幕后故事:

  1. 在主页上,单击“ Click here for a secret message. 链接到/restricted/secret
  2. 根据@RequestMapping注释输入RestrictedControllersecret方法。
  3. 由于尚未建立会话,因此account变量将显示为null
  4. 根据第22行的条件,您将被重定向到/login页面。
  5. 登录页面由您的IDSite托管。
  6. 输入凭据并单击“ Login按钮后,您将被重定向回您的应用程序。
  7. 您的Spring Boot应用程序会自动处理IDSite重定向回的/idSiteResult回调。
  8. 基于在设置applications.properties ,内置IDSite回调处理程序将重定向到/restricted/secret
  9. 这次,有一个会话, account变量将不会为null
  10. 最后,将返回restricted/secret模板。

第6行和第10行之间的所有重定向都在眨眼之间发生。

让我们看一下新模板, restricted/secret.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>Hello World!</title>
        <th:block th:include="fragments/head :: head"/>
    </head>
    <body>
    <div class="container-fluid">
        <div class="row">
            <div class="box col-md-6 col-md-offset-3">
                <div class="stormpath-header">
                    <img src="http://stormpath.com/images/template/logo-nav.png"/>
                </div>
                <h1 th:inline="text">[[${appName}]] App</h1>
 
                <h1 th:inline="text">Hey, [[${account.fullName}]]</h1>
                <h3 th:utext="${messagePrimary}">Primary</h3>
                <h4 th:utext="${messageSecondary}">Secondary</h4>
 
                <a class="btn btn-danger" href="/logout">Log Out</a>
                <a class="btn btn-success" href="/">Go Home</a>
                <a class="btn btn-warning" th:href="@{${crossLink}}">SSO: Jump to Other Site</a>
            </div>
        </div>
    </div>
 
    </body>
</html>

从与ID网站进行交互的角度来看,这里有两行有趣的内容。

<h1 th:inline="text">Hey, [[${account.fullName}]]</h1>

该行访问AccountfullName属性,该属性在传入模板的模型中自动设置。

<a class="btn btn-danger" href="/logout">Log Out</a>

/logout端点由IDSite自动处理,并销毁现有会话。

启动您的Webapp并试用

像以前一样启动应用程序:

gradle clean build
STORMPATH_APPLICATION_HREF=https://api.stormpath.com/v1/applications/6bHOGj63WM8cfC2nhD3Pki \
  java -jar build/libs/idsite_demo-0.1.0.jar

由于我们尚未在Stormpath目录中定义任何用户,因此让我们创建一个新用户,然后确保我们可以以该用户身份登录和注销。

首先,浏览到前门: http://localhost:8080

受限家庭

单击友好的绿色按钮。

id_site_login

点击Create an Account链接。

创建帐号

单击友好的绿色按钮。

受限制的

头晕! 我们进来了!

如果现在单击绿色按钮,将带您回到主页。 如果然后单击主页上的绿色按钮,则将直接转到受限页面。 您将不会再看到登录表单。 这是因为您建立了有效的会话。

登录

如果单击红色按钮,您将注销并重定向到主页。 单击绿色按钮将您带入会话,这将再次使您进入登录表单。

您可能会注意到,创建帐户后,我们将立即登录并发送到受限页面。 您可以通过在Stormpath管理控制台中要求电子邮件验证作为帐户创建过程的一部分来放慢速度。

注意 :存在一个已知问题,您无法在同一会话中登录到Stormpath Admin仪表板并使用ID Site进行身份验证。 我们正在努力尽快解决此问题。 它永远不会影响您的用户,因为它们永远不会出现在您的Stormpath Admin仪表板中。 目前,使用Stormpath Admin Dashbaord时,请使用单独的浏览器配置文件或单独的浏览器实例。

在5分钟内使用Heroku进行单点登录

本节使用github存储库中的SpringBootStormpathIDSite标记。

纽扣

注意 :如果要测试SSO而不自行部署,则可以使用上方的Heroku Deploy按钮部署两个不同的Heroku Apps。

! 回家舒展! 那么,我一直在听到这么多的SSO是什么? 有了我们建立的基础,我们现在可以将该Web应用程序的多个实例部署到Heroku。 所以呢? 我会告诉你“那又怎样!”

我们可以部署Web应用程序的多个实例虽然很新颖,但真正赋予它强大功能的是ID Site的单一登录功能。 在本节的最后,您将看到通过登录该Web应用程序的一个实例,您可以浏览到该Web应用程序的另一个实例的受限页面, 无需再次登录。

首先,我们需要添加一个文件,以便Heroku知道如何启动我们的应用程序。 这是一个单行的Procfile

web: java $JAVA_OPTS -Dserver.port=$PORT -jar target/*.jar

注意bash样式变量: $PORT 。 这是由Heroku自动填充的,不需要我们明确设置。

让我们设置和部署一个Heroku应用程序,并确保一切正常

heroku apps:create idsite-demo-app1 --remote idsite-demo-app1

注意命令末尾的--remote 。 Heroku自动将git远程添加到本地存储库,以便能够部署您的应用程序。 默认情况下,此遥控器将命名为heroku 。 由于我们将部署该应用程序的多个实例,因此我们需要不同的远程名称。

现在我们已经创建了应用程序,我们需要设置一些配置参数。 这是秘密秘诀的一部分,它使我们可以部署相同的代码库,但将Web应用程序链接到不同的Stormpath应用程序。

heroku config:set \
  STORMPATH_API_KEY_ID=<your api key id> \
  STORMPATH_API_KEY_SECRET=<your api key secret> \
  STORMPATH_APPLICATION_HREF=<your app href> \
  STORMPATH_SSO_CROSS_LINK=https://idsite-demo-app2.herokuapp.com/restricted/secret \
  STORMPATH_SSO_MESSAGE_PRIMARY="The secret is that chocolate is delicious"'!' \
  STORMPATH_SSO_MESSAGE_SECONDARY="Yummy"'!' \
--app idsite-demo-app1

假设您已经将另一个名为idsite-demo-app2应用程序部署到了Heroku。 该应用程序的受限页面上使用STORMPATH_SSO_CROSS_LINK链接到其他应用程序。 一切设置正确后,您无需再次登录。 这就是单点登录的强大功能!

还记得我之前说过的Stormpath如何进行自我配置的好处之一是,您无需在代码中嵌入敏感的api密钥信息吗? 这就是所有的地方。 在上面的命令中,我们为Heroku实例设置环境变量。 Stormpath SDK自动检查STORMPATH_API_KEY_IDSTORMPATH_API_KEY_SECRETSTORMPATH_APPLICATION_HREF环境变量是否存在。 如果存在,则SDK与API交互时将自动使用这些环境变量中的值。 这就是将我们的Spring Boot Web应用程序连接到正确的Stormpath应用程序的原因。

好。 设置好舞台。 让我们部署我们的应用程序!

git push idsite-demo-app1 master

这会产生大量输出,但让我们看一下其中的一些亮点:

remote: Compressing source files... done.        
remote: Building source:        
 
...
 
remote:        [INFO]                                                                                 
remote:        [INFO] ------------------------------------------------------------------------        
remote:        [INFO] Building demo 0.0.1-SNAPSHOT        
remote:        [INFO] ------------------------------------------------------------------------        
 
...
 
remote:        [INFO] Installing /tmp/build_a7299c4194f003c6e3730e568a540e82/target/demo-0.0.1-SNAPSHOT.jar to /app/tmp/cache/.m2/repository/com/stormpath/idsite_demo/demo/0.0.1-SNAPSHOT/demo-0.0.1-SNAPSHOT.jar        
 
remote:        [INFO] ------------------------------------------------------------------------        
remote:        [INFO] BUILD SUCCESS        
remote:        [INFO] ------------------------------------------------------------------------        
 
...
 
remote: -----> Discovering process types        
remote:        Procfile declares types -> web        
remote: 
remote: -----> Compressing... done, 63.6MB        
remote: -----> Launching... done, v6        
remote:        https://idsite-demo-app1.herokuapp.com/ deployed to Heroku        
remote: 
remote: Verifying deploy.... done.        
To https://git.heroku.com/idsite-demo-app1.git
 * [new branch]      master -> master

最底层,Heroku正在基于我们的Procfile发现进程类型。 在这种情况下,它是web

我们第一个应用程序的最后一项工作是将ID Site配置为接受来自它的连接并重定向到它。 跳回到ID站点的管理仪表板,并将https://idsite-demo-app1.herokuapp.com添加到授权Javascript原始URL列表中,然后添加https://idsite-demo-app1.herokuapp.com/https://idsite-demo-app1.herokuapp.com/idSiteResult到授权重定向URL列表。

id_site_3

确保单击屏幕底部的“ Save按钮。

并且, https ://idsite-demo-app1.herokuapp.com/准备就绪! 一探究竟。 创建一个帐户。 登录并注销。 玩得开心。

现在,我们到达了SSO应许之地的大门。 这就是所有要做的事情:

  • 创建另一个Stormpath应用程序
  • 创建另一个Heroku应用程序
  • 设置新的Heroku应用程序的配置
  • 将我们的Spring Boot应用程序部署到新的Heroku应用程序
  • 更新我们的ID网站,以包括用于授权来源和重定向的新URL

我们只是在漂洗并重复我们以前所做的事情。

让我们创建新的Stormpath应用程序:

new_application_2

请注意,我们正在为此新应用程序映射相同的帐户存储。

是时候创建一个新的Heroku应用程序了

heroku apps:create idsite-demo-app2 --remote idsite-demo-app2

并且,配置它:

heroku config:set \
  STORMPATH_API_KEY_ID=<your api key id> \
  STORMPATH_API_KEY_SECRET=<your api key secret> \
  STORMPATH_APPLICATION_HREF=<your app href> \
  STORMPATH_SSO_CROSS_LINK=https://idsite-demo-app1.herokuapp.com/restricted/secret \
  STORMPATH_SSO_MESSAGE_PRIMARY="The secret is that ice cream is delicious"'!' \
  STORMPATH_SSO_MESSAGE_SECONDARY="Yummy"'!' \
--app idsite-demo-app2

确保使用新创建的Stormpath应用程序的完整URL。

部署时间:

git push idsite-demo-app2 master

最后,ID网站URL更新:

id_site_4

现在,您可以在待办事项列表上选中以下复选框:构建和部署SSO应用程序。 你完成了!

so

您可以登录到https://idsite-demo-app1.herokuapp.com 。 然后,您可以直接跳至https://idsite-demo-app2.herokuapp.com/restricted/secret ,而无需再次登录!

祝您满意!

在本文中,您创建了一个Spring Boot Web应用程序,该应用程序启用了具有Stormpath的ID站点服务的Single Sign-On。 Stormpath托管登录表单以及与创建新用户和重置密码相关的所有其他链接和表单。

通过一个控制器中的少量代码,您就可以为您的应用程序认证和授权用户。 您可以使用Heroku快速部署它。 我很乐意听到您使用本文中的示例的经验。

如果您有兴趣在Spring Boot中使用Stormpath的更多功能,这是我们的Spring Boot Webapp示例快速入门

随意到掉线电子邮件或以个人随时随地。

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

立即注册按钮

翻译自: https://www.javacodegeeks.com/2016/10/single-sign-java-20-minutes-spring-boot-heroku.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值