我正在使用 OpenID 实现登录系统。
医生说:
主题标识符
一组属性的标识符。它必须是一个 URI。主题标识符对应于消息的身份验证部分中的最终用户标识符。换句话说,消息的属性交换部分的身份属性的主体与认证部分的最终用户相同。主题标识符不包括在属性交换中。
URI的定义相当大,可以是http://
,也可以是gopher://
。
我确定 gopher 不是一个有效的 URI 协议,但是,除了 http(s),还有什么可以作为 OpenID 协议的主题标识符?
你引用了错误的规范。openid 规范,第7.2 节说:
7.2. 正常化
最终用户的输入必须规范化为标识符,如下所示:
- 如果用户的输入以“xri://”前缀开头,则必须将其去掉,以便以规范形式使用 XRI。
- 如果结果字符串的第一个字符是 XRI 全局上下文符号(“=”、“@”、“+”、“$”、“!”)或“(”,如 [XRI_Syntax_2 的第 2.2.1 节中定义的) .0],那么输入应该被视为 XRI。
- 否则,输入应该被视为一个 http URL;如果它不包含“http”或“https”方案,则标识符必须以字符串“http://”为前缀。如果 URL 包含片段部分,它必须与片段分隔符“#”一起被剥离。有关详细信息,请参阅第 11.5.2 节。
- 然后,URL 标识符必须在检索其内容时通过以下重定向进一步规范化,最后将 [RFC3986] 第 6 节中的规则应用于最终目标 URL。依赖方必须将这个最终 URL 记录为声明的标识符,并在请求身份验证时使用。
从第三点我们可以推断出标识符必须是 http(s) URL 或 XRI。