使用Java REST客户端示例访问CAS REST API

使用Java REST客户端示例访问CAS REST API,rest,cas,jasig,Rest,Cas,Jasig,我按照教程在本地CAS服务器上启用REST服务 但是,没有Java示例 Java REST客户端示例 我们需要一个真正有效的例子,前一个是无用的。许多人给我发电子邮件说它不起作用,我确认它不起作用。” 我能够找到,但不幸的是,这对我不起作用 有指针/链接吗?非常感谢。收到了 下面是关于如何启用CAS REST API并能够通过JAVA REST客户端连接到它以使其他人受益的完整解决方案 获取CAS源代码 评论文章 向pom.xml添加以下内容,如#2中的文章所建议 org.jasig.ca

我按照教程在本地CAS服务器上启用REST服务

但是,没有Java示例

Java REST客户端示例

我们需要一个真正有效的例子,前一个是无用的。许多人给我发电子邮件说它不起作用,我确认它不起作用。”

我能够找到,但不幸的是,这对我不起作用

有指针/链接吗?非常感谢。

收到了

下面是关于如何启用CAS REST API并能够通过JAVA REST客户端连接到它以使其他人受益的完整解决方案

  • 获取CAS源代码
  • 评论文章
  • 向pom.xml添加以下内容,如#2中的文章所建议

org.jasig.cas
示例代码。确保提供正确的链接和用户名/密码
  • 当我尝试按原样运行代码时,它抱怨“原因是:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径生成失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效认证路径”。基本上要求你安装证书。如果您有权访问服务器,只需将其复制过来即可。如果没有,我发现了一些代码,如果您没有访问权限或太懒,这些代码将负责您的安装:)
  • 现在,如果使用有效凭据运行JavaCAS客户机,您应该会看到如下内容
    • 你可以看到200码和票。如果您要查看服务器上CA的日志,您应该会看到有关成功的身份验证和票证生成的消息
    • 将用户名/密码更改为一些虚拟数据并尝试运行代码。您将收到400条错误消息,这意味着访问权限被拒绝

    成功

    如果希望跳过证书验证,请将其添加到Java客户端

    //////////////////////////////////////////////////////////////////////////////////////
    // this block of code turns off the certificate validation so the client can talk to an SSL
    // server that uses a self-signed certificate
    //
    // !!!! WARNING make sure NOT to do this against a production site
    //
    // this block of code owes thanks to http://www.exampledepot.com/egs/javax.net.ssl/trustall.html
    //
    
    TrustManager[] trustAllCerts = new TrustManager[] {
        new X509TrustManager() {
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return null;
            }
    
            public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType){}
    
            public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType){}
        }
    };
    
    SSLContext sslContext = SSLContext.getInstance("SSL");
    sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
    
    //
    //
    // end of block of code that turns off certificate validation
    // ////////////////////////////////////////////////////////////////////////////////////
    

    在访问安全的CAS web服务时,开发人员通常对如何让rest客户端工作感到困惑。大多数问题都是问如何让restletcas保护web服务,以及如何调用这些web服务,因为没有真正的例子起作用

    事实上有。Groovy示例是关于JASIG Cas restlet的示例,它清楚地展示了如何通过身份验证来调用服务(它使用Groovy,但转换为Java应该是直接的)。但在我看来,它并没有清楚地解释客户端在访问CAS安全web服务之前需要首先对指定的web服务进行身份验证

    例如,假设有一个JSON服务,它由CAS保护,并由Java和Spring构建。您使用的代码在上的groovy部分中进行了描述

    要使您的服务客户端能够调用该服务,您需要遵循以下简单规则:

  • 从CAS处获取您的机票授予票
  • 从cas获取指定服务呼叫(服务呼叫)的服务票证
  • 向服务票证验证器进行身份验证(此时在springTicketValidation上指定url)
  • 最后打电话给你
  • 或者在代码透视图中

    String ticketGrantingTicket = getTicketGrantingTicket(casUrl, username, password)
    String serviceTicket = client.getServiceTicket(casUrl, ticketGrantingTicket, serviceToCall)
    // validate your ticket first to your application
    getServiceCall(springTicketValidation, serviceTicket)
    getServiceCall(serviceToCall, serviceTicket)
    
    请注意,所有这些操作应在以下条件下进行:

  • 您的调用(restlet调用和服务调用)应该在同一个
    HttpClient
    对象中完成。似乎CAS在会话对象中放入了“某物”,在您调用服务时进行了验证。失败,您将始终在HTTP结果上获得登录页
  • 您的cas客户端应该能够识别您的cas SSL证书,否则它将使您的PKIX路径生成失败
  • 此示例基于cas安全web服务,该服务使用Spring Security来保护cas的服务。我不确定其他受保护的CA是否需要在应用程序端进行票证验证

  • 希望这对CAS 4.0有所帮助,它更简单一些(在apache-tomcat-7.0.55上测试)

    在pom.xml中添加以下依赖项

    
    org.jasig.cas
    cas服务器集成restlet
    4.0.0
    运行时
    org.springframework
    SpringWebMVC
    org.springframework
    spring上下文
    org.springframework
    弹簧芯
    
    不必直接依赖于springframework,因为排除会阻止重复的包

    在web.xml中,您需要为restlet添加servlet映射(mind package已从com.noelios.restlet…更改为org.restlet

    
    再出租
    org.restlet.ext.spring.RestletFrameworkServlet
    1.
    再出租
    /v1/*
    
    在YOUR WEB-INF/lib目录中执行上述步骤后,应添加以下新文件

    ls target/cas/WEB-INF/lib/ | grep restlet
    cas-server-integration-restlet-4.0.0.jar
    org.restlet-2.1.0.jar
    org.restlet.ext.servlet-2.1.0.jar
    org.restlet.ext.slf4j-2.1.0.jar
    org.restlet.ext.spring-2.1.0.jar
    

    您好!回答有用!您能告诉我应该在服务url中添加什么吗?我假设您引用的是字符串serviceURL=“”;line…如果是这种情况,它应该引用您的请求应用程序,该应用程序请求CAS通知当前用户。请访问此网站:在第一步中,您可以看到他们的解释:(这项服务是免费提供的并不重要,因为您所要的票证是url的一部分,即使您的浏览器找不到资源,它也会出现在位置栏中。也可以在CAS上逐步查看此网站。这会让您很好地了解此过程中涉及的步骤。希望对您有所帮助……并感谢您的反馈。)确认!是的,这就是我的意思!谢谢。因此,如果我理解正确,无论服务是否存在,我都可以获得票证。在我的情况下,我没有sampleapp,我只想测试CAS服务器。因此,服务url是否指向不存在的内容并不重要。对吗?是的。正确,您仍然可以测试CAS并获得票证电子机票返回,您不需要实际使用的服务
    String ticketGrantingTicket = getTicketGrantingTicket(casUrl, username, password)
    String serviceTicket = client.getServiceTicket(casUrl, ticketGrantingTicket, serviceToCall)
    // validate your ticket first to your application
    getServiceCall(springTicketValidation, serviceTicket)
    getServiceCall(serviceToCall, serviceTicket)
    
    ls target/cas/WEB-INF/lib/ | grep restlet
    cas-server-integration-restlet-4.0.0.jar
    org.restlet-2.1.0.jar
    org.restlet.ext.servlet-2.1.0.jar
    org.restlet.ext.slf4j-2.1.0.jar
    org.restlet.ext.spring-2.1.0.jar