【问题标题】:MSAL - get user name on iOSMSAL - 在 iOS 上获取用户名
【发布时间】:2019-02-26 13:30:57
【问题描述】:

最近,我们使用 Microsoft 身份验证库 (MSAL - https://github.com/AzureAD/microsoft-authentication-library-for-objc) Objective-C 库在我们的应用中实现了登录/注册机制。一切正常,但是现在我们要显示当前登录用户的名称。

MSALAccount 类中有 username 公共属性 - https://github.com/AzureAD/microsoft-authentication-library-for-objc/blob/dev/MSAL/src/public/MSALAccount.h#L37,但大多数情况下它包含 nil 或一些字符串,例如“缺少令牌响应”。

在同一个 MSALAccount 类中还有一个名为 name (https://github.com/AzureAD/microsoft-authentication-library-for-objc/blob/dev/MSAL/src/MSALAccount%2BInternal.h#L52) 的私有/内部属性。我们在调试过程中注意到该属性包含正确的用户名(例如 Facebook 上的用户名,如果用户通过 FB 登录),而 username 属性仍然包含 nil

有没有人知道获取此name 属性值的方法,除了:

  • 调用私有API(例如performSelector:
  • 查看库的源代码并复制逻辑 获得道具价值的原因

谢谢。

【问题讨论】:

    标签: ios objective-c msal


    【解决方案1】:

    这是 B2C 和 MSAL 的一个已知问题。原因是由于社交帐户的限制,B2C 不会在 IdToken 中为首选用户名返回值。例如,AAD 在这里确实返回了一个值,因为它知道用户是谁,但对于 b2c,因为用户可以使用本地帐户、FB、Github、Amazon 等登录……他们没有一致的值用于首选用户名。此外,一些社交帐户(如 Github)不需要电子邮件。所以...为了解除阻止 MSAL 推出与 ADAL 的缓存兼容性,MSAL 决定在处理 B2C 帐户时在其端使用“缺少令牌响应”,因为它为 null 将违反架构。在这些情况下,如果 IdToken 中的首选用户名为空,则 MSAL 会添加一个常量“缺少令牌响应”。

    但是,您可以使用“名称”声明作为首选用户名。我相信您可以将其添加到政策中。一般在这个B2C doc 中提到 -> “在Return claim 列中,选择您希望在成功完成个人资料编辑体验后发送回您的应用程序的授权令牌中返回的声明。例如,选择显示名称、邮政编码。”

    【讨论】:

    • 如果可能的话,请您解释解决问题的步骤。
    • 具体是哪个问题@TARUN?
    猜你喜欢
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    相关资源
    最近更新 更多