我正在尝试在CAS 4.1.9中实现Google Authentication(OAuth)。
首先,我在console.developers.google.com上创建了一个新项目,其中我为应用程序生成了一个新的客户端ID。
然后,我已经使用Maven覆盖了CAS。在我的pom.xml中,我包括了以下内容:
<dependency>
<groupId>org.pac4j</groupId>
<artifactId>pac4j-oauth</artifactId>
<version>3.4.0</version>
<scope>runtime</scope>
</dependency>
此外,这是我在applicationContext.xml文件中添加的内容:
<bean id="GoogleAuthenticationHandler"
class="org.pac4j.oauth.client.Google2Client"
p:key="<MYKEY>"
p:secret="<MYSECRET>"
p:scope="EMAIL_AND_PROFILE" />
<bean id="clients"
class="org.pac4j.core.client.Clients">
<property name="callbackUrl" value="https://myapplication.com/cas" />
<property name="clients">
<list>
<ref bean="GoogleAuthenticationHandler" />
</list>
</property>
</bean>
最后,我在casloginview.jsp
中添加了以下行<a href="${Google2ClientUrl}">Authenticate with Google</a> <br />
Maven汇编工作正常,战争文件成功地部署在我的Tomcat服务器上。
问题是,我的CAS登录网页中的HREF到Google不包含正确的OAuth URL,但是我在Console.developers.google.com下为客户端定义了相同的重定向URL。
作为第二次尝试,我尝试用oauth url代替$ {google2clienturl}:
<a href="https://accounts.google.com/o/oauth2/auth?redirect_uri=https://myapplication.com/cas&response_type=code&client_i
d=<MY CLIENT ID>&scope=https://www.googleapis.com/auth/analytics.re
adonly+https://www.googleapis.com/auth/userinfo.email&approval_prompt=force&access_type=offline">Authenticate with Google</a> <br />
在这种情况下,Google登录页面显示并接受用户身份验证,但是CAS似乎无法识别Google成功的用户身份验证(即,它没有显示包含身份验证成功消息的正常页面)。p>我错过了什么?
非常感谢您的帮助!
我通过安装较新版本的CAS(5.3.6)设法解决了问题。在这里,Google Authenticator配置要容易得多。实际上只需要两个步骤:
1)在pom.xml文件中添加pac4j依赖关系
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-pac4j-webflow</artifactId>
<version>${cas.version}</version>
</dependency>
2)在cas.properties文件中添加Google Authenticator参数:
cas.authn.pac4j.google.id=<MY_CLIENT_ID>
cas.authn.pac4j.google.secret=<MY_SECRET>
cas.authn.pac4j.google.clientName=<MY_CLIENT_NAME>
cas.authn.pac4j.google.autoRedirect=false
cas.authn.pac4j.google.principalAttributeId=
cas.authn.pac4j.google.scope=EMAIL_AND_PROFILE
完成此操作后,一个指向Google身份验证的链接会自动显示在CAS登录页面中。