【问题标题】:Standard HTTP header to indicate location of OpenID Connect server?指示 OpenID Connect 服务器位置的标准 HTTP 标头?
【发布时间】:2018-06-19 06:23:32
【问题描述】:

我们正在开发一个访问资源服务器(也在我们的控制之下)上的内容的本机应用程序。资源服务器将要求本机应用程序的用户通过 OpenID Connect 进行身份验证,以获取作为不记名令牌 (RFC 6750) 传递的访问密钥。授权服务器是运行 Keycloak 的独立服务器。

我想避免将有关授权服务器地址的信息硬编码到客户端软件中。相反,我希望资源服务器提供到身份验证服务器的提供者发现端点的链接,可能作为 HTTP 401 质询的一部分。我可以发明一个 X-MyApp-* 标头,但我想知道是否有一个既定的约定(无论是 HTTP 标头、401 响应中的正文内容、资源服务器上的标准 URL 等)?

【问题讨论】:

    标签: http oauth-2.0 openid-connect


    【解决方案1】:

    RFC6750 定义了 WWW-Authenticate Response Header 的使用。

    Section 3 的规范定义如下,

    如果受保护的资源请求不包括身份验证 凭据或不包含启用访问的访问令牌 对于受保护的资源,资源服务器必须包含 HTTP “WWW-Authenticate”响应

    您可以使用此标头来响应授权服务器的地址。规范允许具有规范定义之外的属性,

    本规范定义的所有挑战必须使用 auth-scheme 价值“承载者”。该方案必须后跟一个或多个 身份验证参数值。 this 使用或定义的 auth-param 属性 规格如下。 其他 auth-param 属性可能是 也可以使用

    现在,如果我们可以定义一个名为 auth_server 的自定义属性,那么我们可以将其添加到 401 响应的 WWW-Authenticate 标头中,如下所示

    WWW-Authenticate: Bearer realm="example", auth_server="URL-TO-OIDC-SERVER"

    您的客户端必须解析标头并提取 auth_server 值。

    【讨论】:

    • 您的意思是作为 key=value 对之一吗?是否有标准密钥可供使用,或者我应该自己制作一个?
    • @BruceMerry 是的,您可以使用类似的方法。我用一个例子更新了我的答案。我实际上也看到了这个在使用中。
    猜你喜欢
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2016-06-04
    • 2020-06-29
    • 2017-05-05
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    相关资源
    最近更新 更多