我正在尝试添加"使用Microsoft登录"按钮到具有MSAL库和V2端点的Angular App。该应用程序需要与个人和组织帐户一起使用,然后与我的数据库中的现有用户交叉引用。即微软登录只是我现有登录系统的便利。
到目前为止,我采用的流程是:
1.用户使用图表范围openid email profile
通过浏览器中的隐式流请求JWT id令牌
2.浏览器将id令牌发回服务器
3.服务器验证令牌(我允许多个租户,不检查JWT的发行人字段)。
4.服务器首先在email
声明中查找电子邮件
5.如果没有email
声明,请检查preferred_username
6.如果电子邮件与我们的某个注册地址匹配,则用户已登录。如果没有匹配或没有电子邮件,则返回错误。
到目前为止,这么好。我已经使用个人帐户和组织帐户对此进行了检查,但它确实有效。
但是,整个方法在很大程度上依赖于正在验证的用户的电子邮件地址。
在令牌文档中,我读过preferred_username
是可变的,"不得用于做出授权决定" 。我可以看到逻辑,但在这种情况下,我只使用电子邮件进行身份验证而不是资源授权
https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-tokens
所以我的问题是。是否有任何方式可以在"电子邮件中提供欺骗性(未经验证的)电子邮件"或" preferred_username" V2 id令牌中的字段?
如果是的话,我是否可以使用图谱API进行交叉检查,看看它是否已经过验证?
我的潜在解决方法是发送自己的验证电子邮件,将MS帐户与我们自己的帐户相关联,但我希望尽可能避免这种情况。
答案 0 :(得分:1)
我怀疑那些可能会被欺骗。 更大的问题是用户主要名称/电子邮件是否发生变化。 正如您在Token reference中所看到的,有2个声明可以更好地识别用户:
由于主题“始终存在于Azure AD发布的令牌中”,因此它可能是最佳选择。 如果您需要在Microsoft Graph API中标识用户,则对象ID很好。