天天看点

4、CAS第三方登录和获取详细数据

前言

创建项目之前,我将客户端8081复制了一份出来,做了一个客户端two:8082。为了验证第三方登录,而又不破坏之前的项目,我新建了一个客户端工程,来用来接收第三方登录数据。目前工程端口为8083

1、总司令下新建module工程,只聚合。因为子工程是一个springBoot项目

1.1、创建项目

4、CAS第三方登录和获取详细数据

1.2、导入相关依赖

web、mysql、thyme、jpa

4、CAS第三方登录和获取详细数据

1.3、总司令进行聚合它

<modules>
    <module>sso-server</module>
    <module>sso-server-rest</module>
    <module>sso-client-one</module>
    <module>sso-client-two</module>
    <module>sso-client-pac4j</module>
</modules>
      

1.4、开始从前言中介绍的客户端迁入cas客户端配置、pom依赖、以及jap等相关属性

下面不讲述配置过程,端口配置为8083

1.5、host中配置这个客户端的域名为

# cas 单点登录
127.0.0.1 passport.sso.com
127.0.0.1 casClientOne
127.0.0.1 casClientTwo
127.0.0.1 casclientpac4j      

1.6、测试单点登录客户端是否创建成功

启动下面,测试单点登录能否成功

sso-server-8443、

sso-server-rest-8888、

sso-client–pac4j-8083

浏览器中访问 http://casclientpac4j:8083/clientpac4j 测试成功

4、CAS第三方登录和获取详细数据

2、github第三方登录

2.1、创建应用 ​​​​

1、填写我们服务端的信息

4、CAS第三方登录和获取详细数据

2、创建好应用之后会得到,Client ID、Client Secret。在sso-server的配置红会用到

4、CAS第三方登录和获取详细数据

2.2、sso-server中进行配置

# 8、第三方登录
#GitHub OAuth Login
cas.authn.pac4j.github.id=129e3bd696944c71ef21
cas.authn.pac4j.github.secret=f0800601daf5886428d6c335857c860985ca0422
cas.authn.pac4j.github.profileAttrs.id=id
cas.authn.pac4j.github.client-name=github
      

2.3、客户端配置接收从服务端返回来的github的信息

其实和之前在cas博客2中的接收服务端的更多信息获取方式是一样的

@GetMapping("github")
@ResponseBody
public String github(HttpServletRequest request){

    if (request.getUserPrincipal() != null) {
        AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();

        final Map attributes = principal.getAttributes();


        if (attributes != null) {
            Iterator attributeNames = attributes.keySet().iterator();

            if (attributeNames.hasNext()) {

                for (; attributeNames.hasNext(); ) {
                    String name = (String) attributeNames.next();
                    System.out.printf("name:"+name+"::");

                    final Object attributeValue = attributes.get(name);

                    if (attributeValue instanceof List) {
                        final List values = (List) attributeValue;
                        for (Object value : values) {
                            System.out.printf("value:"+name);

                        }
                        System.out.printf("|");
                    } else {
                        System.out.printf(attributeValue.toString());
                    }
                    System.out.println("------------");
                }
            } else {
                System.out.println("No attributes are supplied by the CAS server.</p>");
            }
        } else {
            System.out.println("<pre>The attribute map is empty. Review your CAS filter configurations.</pre>");
        }
    } else {
        System.out.println("<pre>The user principal is empty from the request object. Review the wrapper filter configuration.</pre>");
    }


    String user3 = AssertionHolder.getAssertion().getPrincipal().getName();
    System.out.println("3、AssertionHolder.getAssertion().getPrincipal().getName()"+user3);

    return  "github";
}
      

之前rest登陆,返回的信息,通过上面的代码打印

name:address::山西忻州------------
name:isFromNewLogin::true------------
name:authenticationDate::2018-03-12T17:12:29.001+08:00[Asia/Shanghai]------------
name:authenticationMethod::RestAuthenticationHandler------------
name:successfulAuthenticationHandlers::RestAuthenticationHandler------------
name:longTermAuthenticationRequestTokenUsed::false------------
name:id::1------------
name:email::[email protected]
3、AssertionHolder.getAssertion().getPrincipal().getName()[email protected]
      

2.4、启动开始测试吧,朋友。

sso-server :8443

sso-client-pac4j 8003

1、页面上多了一个登陆的选项github

4、CAS第三方登录和获取详细数据

2、点击githu进行登陆

4、CAS第三方登录和获取详细数据

3、登陆吧,朋友,观察 客户端的控制台,看看githu登陆之后返回的东西

name:isFromNewLogin::false------------
name:authenticationDate::2018-03-12T16:59:26.747+08:00[Asia/Shanghai]------------
name:authenticationMethod::ClientAuthenticationHandler------------
name:clientName::github------------
name:successfulAuthenticationHandlers::ClientAuthenticationHandler------------
name:longTermAuthenticationRequestTokenUsed::false------------
3、AssertionHolder.getAssertion().getPrincipal().getName()26478376
      
4、CAS第三方登录和获取详细数据

3(提示,没有登录成功,因为测试应用没有通过核,还是老外好,github多么开源)

3.1、创建账号,

4、CAS第三方登录和获取详细数据

3.2、开始配置sso-server

# OAuth Login
cas.authn.pac4j.oauth2[0].id=1100649
cas.authn.pac4j.oauth2[0].secret=ed162a5ffdec4277a869715428bc207d
cas.authn.pac4j.oauth2[0]
cas.authn.pac4j.oauth2[0].profileAttrs.id=username
cas.authn.pac4j.oauth2[0].c
      

3.3、启动服务吧,朋友们

sso-server 8443

sso-client-pac4j 8003

1、登录页面

4、第三方国内的太恶心了。都需要经过审核。对于QQ和其他的应用。更加麻烦。所以 这里就不讲述了,所以建议公司使用的伙伴们自己研究下吧