【问题标题】:Apereo CAS OAuth2: what is the Purpose of the /callbackAuthorize Endpoint?Apereo CAS OAuth2:/callbackAuthorize 端点的目的是什么?
【发布时间】:2020-08-07 01:05:38
【问题描述】:

此观察与 CAS 5.3.9 和 https://apereo.github.io/cas/5.3.x/installation/OAuth-OpenId-Authentication.html 下的文档有关

没有提到 /callbackAuthorize 端点,但我在授权代码流的实现中看到了这一点。以下是请求序列(我们假设用户已经通过 CAS 身份验证):

REQ: GET https://localhost:8145/api/profile(我的应用程序的受保护端点)

RESP:302,位置:https://cas-server:8443/cas/oauth2.0/authorize?response_type=code&client_id=client1&redirect_uri=https%3A%2F%2Flocalhost%3A8145%2Fcallback%3Fstate%3Dcsrf

请求:GET(以上网址)

RESP:302,位置:https://cas-server:8443/cas/login?service=https%3A%2F%2F172.16.238.10%3A8443%2Fooscas%2Foauth2.0%2FcallbackAuthorize%3Fclient_id%3Dclient1%26redirect_uri%3Dhttps%253A%252F%252Flocalhost%253A8145%252Fcallback%253Fstate%253Dcsrf%26response_type%3Dcode%26client_name%3DCasOAuthClient

请求:GET(以上网址)

RESP:302,位置:https://cas-server:8443/cas/oauth2.0/callbackAuthorize?client_id=client1&redirect_uri=https%3A%2F%2Flocalhost%3A8145%2Fcallback%3Fstate%3Dcsrf&response_type=code&client_name=CasOAuthClient&ticket=eyJhbGciOiJIUzUxMiJ9.ZXlKNmFYQWlPaUpFUlVZaUxDSmhiR2NpT2lKa2FYSWlMQ0psYm1NaU9pSkJNVEk0UTBKRExVaFRNalUySW4wLi5RdURKNXBJZ21zOU1LcldqSmwxMk5BLnRXb3FrSEFIRzcyY2M3U3k4cm9fR0VCS05feThtVjREazBYNU81NVNVY3g0NEFlby1Kc2R3NGszNUM3X1dDVkwuM01Pd3c5ci1mVS1QelROWDVIZkJSUQ%3D%3D.b4rotud6-2s3tOU21-Y0xclwVkVEioTLhiyRhi5VotNfjzt5vKoM2Ix9Hy_OW9KSpuGMqWsBbFOtR9K2B8E6dw&lang=de

请求:GET(以上网址)

RESP:500,内部服务器错误(cas 服务器日志显示 SSL 握手异常,可能服务器试图访问他在信任库中没有证书的 URL)

我的问题:

1) /oauth2.0/callbackAuthorize 端点是否有任何文档?

2) 为什么 CAS 服务器在 OAuth2 流中发出票证?他不应该生成访问令牌吗?

3) 参数 client_name=CasOAuthClient 来自哪里? CAS 服务器是否尝试充当 OAuth2 客户端?

【问题讨论】:

    标签: oauth-2.0 cas apereo


    【解决方案1】:

    1) /oauth2.0/callbackAuthorize 端点是否有任何文档?

    是的。有关一般设计说明,请参阅 this link,然后查看 pac4j 的工作原理。

    2) 为什么 CAS 服务器在 OAuth2 流中发出票证?他不应该生成访问令牌吗?

    没有。授权代码流通过访问令牌端点发出 AT。如果您需要来自授权端点的 AT,则需要使用不同的授权类型。有关更多信息,请参阅 OAUTH 规范。

    3) 参数 client_name=CasOAuthClient 来自哪里? CAS 服务器是否尝试充当 OAuth2 客户端?

    来自above link

    ...几乎所有 CAS 支持的协议都以相同的意图运行。给定的 CAS 部署配备了一个嵌入式“插件”,它知道如何使用 SAML2 和 CAS、OAuth2 和 CAS,或 OpenID Connect 和 CAS 或其他什么。例如,当您考虑以下启用 OAuth2 的客户端应用程序的身份验证流程时,该等式的右侧始终是 CAS:

    • CAS 部署已开启 OAuth2 插件。
    • 向相关的 CAS 端点提交 OAuth2 授权请求。
    • OAuth2 插件验证请求并将其转换为 CAS 身份验证请求!
    • 身份验证请求被路由到相关的 CAS 登录端点。
    • 用户进行身份验证,然后 CAS 将流程路由回 OAuth2 插件,并为插件颁发了服务票证。
    • OAuth2 插件会尝试验证该票证以检索必要的用户配置文件和属性。
    • 然后,OAuth2 插件通过将配置文件和经过验证的断言转换和转换为客户端应用程序可能需要的内容,继续发出正确的 OAuth2 响应。

    另外,提取from this link

    ...所有协议都是 CAS 服务器的客户端,它们使用 CAS 协议与之交互。这是在请求/浏览器级别完成的,而不是通过高度定制的 web 流在内部做事,这样会相互纠缠。 CAS 中存在的协议模块对 CAS 身份验证流程/引擎的内部内部工作进行零假设。他们像对待外部 CAS 服务器一样对待它;唯一的区别是,他们直接坐在 CAS 服务器中,但他们仍然完全不知道这一事实。简单地说,在我们的示例中,SAML2 模块基本上说:“这个传入的请求需要经过身份验证。因此,我会将其路由到 CAS 服务器进行身份验证,当它返回时,我会尽我所能”。

    【讨论】:

    • 非常感谢您的解释。原来我叫错树了!正如对我的第二个问题的轻微澄清:我期待 CAS 服务器发布“访问令牌”,但我说错了。我的意思是“授权码”。无论如何,现在我知道为什么会出现服务票证,CAS 服务器实际上只是在幕后进行 CAS 工作流。如果有一些文档来说明 OAuth2 授权代码流的样子,包括 CAS 请求,那就太好了。
    • 再想一想:如果我的浏览器被重定向到像 /callbackAuthorize 这样的内部 CAS url,这不会被视为违反 OAuth2 协议吗?通过阅读您的链接,我会假设插件自己执行这些请求,但我在浏览器中看到了这些重定向。
    • 没有。协议是两个实体之间的协议。它说明了接受哪些输入,应该用它们做什么以及输出应该是什么。剩下的就是实现细节。就像您订购意大利辣香肠披萨并得到它一样。您不在乎使用了什么烤箱或厨师的名字!如果您的订单满意,您就可以出发了。
    • 嗯,对我的 OAuth2 请求(见上文)的响应是重定向到 /callbackAuthorize 端点,我不相信我订购了它。但也许我在不知不觉中做到了?这个 /callbackAuthorize 端点是否有任何文档?
    • 再一次,你没有收到。您是应用程序,无论在服务器或厨房内发生什么,都与您作为客户端无关。在应用程序级别与您联系的时间是您收到订单的时间。其余的无关紧要,与客户无关。我知道没有其他文档。
    猜你喜欢
    • 2021-03-27
    • 2020-08-04
    • 1970-01-01
    • 2020-10-31
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    相关资源
    最近更新 更多