使用onelogin快速集成Okta SSO

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2017/03/09/use-onelogin-okta-sso/

Okta是专业的身份管理平台,它是以整合的思路管理企业应用和资源。

如果企业有一个内部应用需要认证后使用,那么Okta提供的单点登录功能就是一个很好的集成点。集成Okta可以将用户认证部分从应用剥离,使用者还是可以使用Okta的信息登录,并且应用也能获得对应的信息。

本文选用的是通过SAML协议集成Okta。SAML即安全断言标记语言,英文全称是Security Assertion Markup Language。 它是一个基于XML的标准,用于在不同的安全域(security domain)之间交换认证和授权数据。

来个示意图:

从图中可以看到集成部分从收到Response之后应用就获得用户的信息(比如Name ID),之后的事情就是应用自己的了。

Saml毕竟是一个标准协议,直接使用公开的库就行了。OpenSaml本来是最合适的,但是使用有些麻烦,最后选择的是onelogin的java-saml库。

必要的配置只有五个

onelogin.saml2.sp.entityid
onelogin.saml2.sp.assertion_consumer_service.url
onelogin.saml2.idp.entityid
onelogin.saml2.idp.single_sign_on_service.url
onelogin.saml2.idp.x509cert

这个在Okta的配置页面就有。

一般应用程序需要提供两个功能点,一个是GET方法检测是否需要进入SSO流程,一个是POST方法用于接收Saml的返回断言。

@GET
    public Response showLoginPage(@Context HttpServletResponse response,
                                  @Context HttpServletRequest request) throws Exception {
        Auth auth = new Auth(request, response);
        auth.login();
        return Response.ok().build();
    }
@POST
    public Response retrieveInformation(@Context HttpServletResponse response,
                                  @Context HttpServletRequest request,
                                        @Context UserRepository userRepository,
                                        @Context AuthenticationService authenticationService) throws Exception {
        Auth auth = new Auth(request, response);
        auth.processResponse();
        if(auth.isAuthenticated() && auth.getErrors().isEmpty()) {
            String userId = auth.getNameId();
            // 自己的逻辑处理
            return Response.temporaryRedirect(uri).build();
        }else{
            return Response.serverError().build();
        }
    }

 

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2017/03/09/use-onelogin-okta-sso/

发表评论