MSAL - 在iOS上获取用户名

问题描述 投票:2回答:1

最近,我们使用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类中还有一个名为namehttps://github.com/AzureAD/microsoft-authentication-library-for-objc/blob/dev/MSAL/src/MSALAccount%2BInternal.h#L52)的私有/内部属性。我们在调试期间注意到此属性包含正确的用户名(例如,如果用户通过FB登录,则在Facebook上显示用户名),而username属性仍包含nil

有没有人知道如何获得这个name属性值,除了:

  • 调用私有API(例如performSelector:
  • 查看库的源代码并复制获取prop值的逻辑

谢谢。

ios objective-c msal
1个回答
1
投票

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

但是,您可以使用“名称”声明作为首选用户名。我相信你可以在政策中添加它。它通常在此B2C doc中提及 - >“在返回声明列中,选择您希望在成功的配置文件编辑体验后发送回应用程序的授权令牌中返回的声明。例如,选择显示名称,邮政编码。”

© www.soinside.com 2019 - 2024. All rights reserved.