OIDC JWT身份声明例如电话号码或电子邮件可以多个吗?

问题描述

很快,这样的OIDC JWT有效载荷有效吗?

{
   "sub"                     : "alice","email"                   : ["[email protected]","[email protected]"],...
}

在阅读正式的RFC时,我只能发现键(subemail等)必须是唯一的,但关于值则一无所有。

解决方法

email声明必须为字符串。因此,根据OpenID Connect Core 1.0 spec(格式是我的),数组不是有效值:

电子邮件
字符串

最终用户的首选电子邮件地址。它的值必须符合RFC 5322 addr-spec语法。 RP一定不要依赖此值 是唯一的,如Section 5.7中所述。

RFC 5322中, addr-spec 语法定义如下:

addr-spec是一个特定的Internet标识符,其中包含本地 解释字符串,后跟符号字符(@,ASCII 值64),然后是Internet网域。 [...]

addr-spec       =   local-part "@" domain

local-part      =   dot-atom / quoted-string / obs-local-part

domain          =   dot-atom / domain-literal / obs-domain

domain-literal  =   [CFWS] "[" *([FWS] dtext) [FWS] "]" [CFWS]

dtext           =   %d33-90 /          ; Printable US-ASCII
                    %d94-126 /         ;  characters not including
                    obs-dtext          ;  "[","]",or "\" ```