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

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

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

除了以下内容,是否有人知道获取name属性值的方法:

  • 调用 private API(例如performSelector:)
  • 查看库的源代码并复制逻辑
    道具价值

  • 谢谢。

    最佳答案

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

    但是,您可以使用“名称”声明作为首选用户名。我相信您可以在政策中添加它。在B2C doc->中通常提到了这一点,“在成功的个人资料编辑经验后,在“退回索赔”列中,选择要在发送回应用程序的授权 token 中返回的索赔。例如,选择“显示名称,邮政编码”。”

    关于ios - MSAL-在iOS上获取用户名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54886658/

    10-12 03:35