微软Live OAuth登录端点选择及用户信息获取作用域咨询
我来帮你理清这两个问题,都是集成Microsoft OAuth认证时很容易踩的坑:
登录端点选择:login.live.com vs login.microsoftonline.com
简单说,两者对应微软不同的认证体系:
login.live.com是旧版Live Connect的端点,仅支持个人Microsoft账户(比如Outlook.com、Xbox账户),现在已经逐步被新的认证体系取代。login.microsoftonline.com是Azure AD的认证端点,尤其是它的v2.0版本(路径带/oauth2/v2.0/),支持所有类型的账户:个人Microsoft账户、工作/学校账户,也是微软目前主推的认证方案。
如果你希望你的Web应用能兼容更多用户类型,或者想使用最新的Microsoft Graph API,强烈推荐使用 login.microsoftonline.com 的v2.0端点。
获取用户资料的正确作用域
你之前用的wl.basic是旧版Live Connect API的作用域,现在已经被废弃了,所以不管搭配哪个端点都会报错。现在要获取用户的邮箱、名、姓,需要用OpenID Connect标准作用域 + Microsoft Graph相关的权限:
openid:必须包含,开启OpenID Connect认证流程,这样才能获取到包含用户身份信息的ID令牌profile:用于获取用户的基本资料,包括名(givenName)、姓(surname)、显示名称(displayName)等email:用于获取用户的邮箱地址offline_access:可选,如果你需要长期访问权限,可以获取刷新令牌
注意:这些作用域必须搭配login.microsoftonline.com的v2.0端点使用,旧的login.live.com不支持这些标准OIDC作用域。
举个例子,你的授权请求里的作用域参数应该是:
scope=openid profile email offline_access
拿到有效访问令牌后,调用Microsoft Graph的GET /v1.0/me接口,就能获取到你需要的用户资料字段,比如givenName(名)、surname(姓)、mail(邮箱)等。
你之前遇到的openid、profile等作用域不被识别或忽略的问题,大概率是因为用错了端点——比如用了login.live.com而不是v2.0的Azure AD端点,或者端点路径不正确。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

