如何识别使用ADAL对ADFS 3.0进行身份验证的用户?

时间:2016-08-08 17:45:55

标签: ios objective-c adal

我使用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服务器上是否有一个端点,我可以使用提供的访问令牌来命令我可以请求此信息?

1 个答案:

答案 0 :(得分:1)

事实证明,ADFS 3.0可能不支持id_token,但如果您正确设置了依赖方的声明规则,它们将被添加到您收到的访问令牌的顶层。显然,声明规则在正确时应该看起来像这样:

Claim Rule

访问令牌是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