【问题标题】:How to identify a user authenticated with ADAL against ADFS 3.0?如何针对 ADFS 3.0 识别通过 ADAL 进行身份验证的用户?
【发布时间】:2016-08-09 06:47:01
【问题描述】:

我在 ADFS 3.0 服务器上安装了适用于 iOS 的 ADAL。它会打开一个 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 服务器上是否有我可以使用提供的访问令牌访问的端点,我可以在其中请求此信息?

【问题讨论】:

    标签: ios objective-c adal


    【解决方案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

    【讨论】:

    猜你喜欢
    • 2019-12-09
    • 2017-09-09
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    相关资源
    最近更新 更多