我使用ADAL for iOS使用ADFS 3.0服务器。它会显示一个Web视图,用户进行身份验证,然后使用访问令牌进行回调。
我遇到的问题是我没有得到有关用户身份的信息。 userInformation
属性为nil
。任何HTTP响应中都没有id_token
,我不知道如何首先请求一个。我在其他地方看到微软人员说ADFS 3.0根本不支持id_token
。我还解析了JWT格式的访问令牌,其中没有任何信息可用于识别用户。
在ADFS 3.0服务器端,我们配置并启用了一个声明规则,该声明规则表示为依赖方提供GUID,给定名称,姓氏和电子邮件地址。但是,添加该规则对我通过ADAL获得的回复没有任何影响。
如何识别通过ADAL针对ADFS 3.0服务器进行身份验证的用户(即获取GUID,名字,姓氏和电子邮件地址)?在ADFS 3.0服务器上是否有一个端点,我可以使用提供的访问令牌来命令我可以请求此信息?
答案 0 :(得分:1)
事实证明,ADFS 3.0可能不支持id_token
,但如果您正确设置了依赖方的声明规则,它们将被添加到您收到的访问令牌的顶层。显然,声明规则在正确时应该看起来像这样:
访问令牌是JWT令牌,因此可以对其进行解码并从中检索值。解码后,它看起来像这样:
{
"appid": "5f9a5589-6064-423a-8a1a-6a0d7ddda19f",
"aud": "x-msauth-glazersapp://com.example.MyApp",
"auth_time": "2016-08-08T22:32:14.459Z",
"authmethod": "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport",
"email": "me@example.com",
"exp": 1470699134,
"family_name": "John",
"given_name": "Doe",
"iat": 1470695534,
"iss": "http://adfs.example.com/adfs/services/trust",
"objectGUID": "c8oMVOOEskutnPVno41Y1w==",
"ver": "1.0",
}
“email”,“family_name”,“given_name”和“objectGUID”被添加到访问令牌中。请注意,这样提供的GUID实际上是Base64编码。
此处提供了更多信息:http://chrisrisner.com/Accessing-Resources-Secured-By-Azure-Active-Directory-with-iOS-and-Android