【问题标题】:How to get CasToken from server?如何从服务器获取 CasToken?
【发布时间】:2019-07-26 08:46:07
【问题描述】:

我想从独立应用程序进行 Cas 身份验证,但无法从服务器获取票证。任何人都可以为我提供将票证作为字符串返回的方法的示例代码,以便我可以将其用于身份验证。如您所见,唯一的参数应该是来自服务器的 URL。那是我还没有的(我知道 casToken 被初始化为 null 并且它不起作用)。

protected String getCasTicket(String serviceUrl) {

        String casToken = null;

        if (casToken == null){

            logger.error("Failed to get CAS-Token!");

        }else{
            logger.info("Got CAS-Token successful!");
        }

        return casToken;
}

【问题讨论】:

    标签: java token cas


    【解决方案1】:
    public class CasAuthenticationServlet extends HttpServlet {
    ...
      @Override
      protected void doGet(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
        // NOTE: The CasAuthenticationToken can also be obtained using
        // SecurityContextHolder.getContext().getAuthentication()
        final CasAuthenticationToken token = (CasAuthenticationToken) request.getUserPrincipal();
        // proxyTicket could be reused to make calls to the CAS service even if the
        // target url differs
        final String proxyTicket = token.getAssertion().getPrincipal().getProxyTicketFor(targetUrl);
    
        // Make a remote call using the proxy ticket
        final String serviceUrl = targetUrl+"?ticket="+URLEncoder.encode(proxyTicket, "UTF-8");
        String proxyResponse = CommonUtils.getResponseFromServer(serviceUrl, "UTF-8");
    ...
    }
    

    CasAuthenticationProvider 构造一个CasAuthenticationToken,包括TicketResponse 和GrantedAuthoritys 中包含的详细信息。 然后控制权返回到CasAuthenticationFilter,它将创建的CasAuthenticationToken 置于安全上下文中。

    Cas 示例:https://docs.spring.io/spring-security/site/docs/4.2.x/reference/html/sample-apps.html#cas-sample

    编辑:

    请参考https://www.javaworld.com/article/3313114/what-is-a-java-servlet-request-handling-for-java-web-applications.html 创建servlet

    【讨论】:

    • 首先谢谢!我找到了一个非常相似的例子,但我不知道如何设置 HttpServletRequest 和 HttpServletResponse 所以在调用方法时我可以输入这些参数。
    • @XaNaX420 编辑了答案。添加 servlet doGet() 方法(作为获取令牌的 HTTP 端点)或实施过滤器以检查所有请求的身份验证。我了解您使用的是独立的 Java 应用程序,而不是 Web 应用程序。但不知何故,您需要使用外部服务来检索令牌。我建议您阅读如何从 Java 应用程序调用 servlet。 stackoverflow.com/questions/4349854/…
    • 所以如果我理解正确的话,你写的类是我必须命中的 Servlet?
    • @XaNaX420 是的。您可以使用上述代码编写任何 Web 服务,这就是拥有 HttpRequest 和 HttpResponse 的方式
    • 您好,我再次收到来自 Servlet 的错误。错误:(21, 46) java: 无法访问 org.springframework.security.authentication.AbstractAuthenticationTokenclass 文件,因为找不到 org.springframework.security.authentication.AbstractAuthenticationToken。但我不使用 AbstractAuthenticationToken??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 2014-08-03
    相关资源
    最近更新 更多