我正在使用MSAL库在Angular5应用程序中对Azure B2C进行身份验证。我将MS和Google帐户以及本地电子邮件配置为提供商,他们都很乐意获得初始令牌。然后通过JWT提供者nugget包对我的dotnet核心WebAPI后端起作用。
我不确定我是如何更新令牌的,但是调用MSAL库的acquireTokenSilent
功能会导致Microsoft和Google提供商令牌重定向回Azure然后又回到我的应用程序(不是在SPA应用程序中可取的)。本地电子邮件会抛出关于状态的错误,但不会重定向,但我不太关心。
许多示例应用说Silent renewing of access tokens is not supported by all social identity providers,但没有详细说明哪些应用......
是否有一种方法可以使用MSAL在没有完全重定向的情况下针对B2C获取替换令牌?
this.app.acquireTokenSilent(this.config.b2cScopes)
.then((newToken) => {
if (newToken) {
console.log(`got new token ${token}`);
return newToken;
}
else {
console.log('went bang');
//presumably this blewup...
}
})
.catch((fail) => {
console.error(fail);
});
调用此函数会导致重定向。最初,这请求login.microsoftonline
获取open-id配置。然后请求
https://login.microsoftonline.com/te/{tenant}/{policy}/oauth2/v2.0/authorize?response_type=token&scope={url + scope name} openid profile&state=9c23e002-a07c-4adb-a7fd-db5400f2b8ee&nonce=0ed5c352-d363-4e5e-bd40-4dc10936361f&client_info=1&x-client-SKU=MSAL.JS&x-client-Ver=0.1.5&client-request-id=3889aaeb-4b47-4726-9ef0-e4e3c73ea1e5&prompt=none&domain_req=ba2006a0-9352-424d-81b5-f2df33157082&login_req=213613d5-8217-4db9-8419-60441a5b512f-b2c_1_signup&domain_hint=organizations
回复login.live.com
的哪个302到JavaScript required to sign in
。然后,我被丢弃回到我的应用程序中而没有新的令牌,并且没有真正的想法为什么它的不安除了怀疑错误的流程正在使用并且B2C正试图通过交互路线获得新的令牌。
范围明确,B2C租户默认配置openid
和offline_access
,默认情况下设置为user_impersonation
(默认情况下是默认设置)和一个名为read
的新范围。我正在我的请求this.config.b2cscopes
中发送这些范围。 openid
和profile
MSAL似乎自行添加。