我们正在使用Azure AD B2C通过我们的API对用户进行身份验证。 客户端(Angular 2)和API都具有相同的客户端ID。
一切正常。作为我定义的范围openid
。
但是,在登录超过到期时间后调用AcquireTokenAsync时,我现在收到此错误:
“AADB2C90055:请求中提供的范围'openid配置文件'必须指定资源,例如”https://example.com/calendar.read“。
我从Angular应用程序中调用此方法;我们正在使用MSAL.JS. 因此,它在令牌过期时间内工作正常(默认为60分钟),但在60分钟后我开始出现此错误。
与错误1完全相同的问题:Azure AD B2C Token Issue
这是MSAL JS中的错误还是我们的设置不正确? 我知道我可以为我们的API创建一个单独的客户端ID,但这适用于登录,所以我没有打扰。我们的API只需要知道用户名,电子邮件等。
答案 0 :(得分:1)
您无法刷新令牌的原因是Microsoft Authentication Library for JavaScript (MSAL.js)仅支持OAuth隐式授权。
OAuth Implicit Grants,按设计,不支持/返回刷新令牌:
隐式授权类型用于获取访问令牌(它不支持刷新令牌的发布),并针对已知操作特定重定向URI的公共客户端进行了优化。这些客户端通常使用脚本语言(如JavaScript)在浏览器中实现。
要获得刷新令牌,您需要使用the Authorization Code Grant进行身份验证。这将需要您的后端的一些工作来捕获授权代码并将其转换为访问和刷新令牌。