如何从客户端获得登录用户的access_token ?使用Azure AD B2C混合流



我在asp.net core 7上有一个web应用程序,由Azure AD B2C认证保护。这部分是工作的,用户是正确的认证服务器端,我可以得到一个access_token服务器端感谢AuthorizeForScopes属性和ITokenAcquisition与GetAuthenticationResultForUserAsync。

现在我需要获得一个user_access令牌客户端,这样我就可以直接从javascript调用web api,而不需要重新签名用户。

客户端代码为:

<script src="https://alcdn.msauth.net/browser/2.5.1/js/msal-browser.js"></script>
<script type="module">
const msalInstance = new msal.PublicClientApplication({
auth: {
clientId: "bbd0f8e1-a81a-43c6-82d8-xxxxxx",
authority: "https://login.microsoftonline.com/cfc1d2e8-3626-4dca-9cd7-xxxxxx",
},
cache: {
cacheLocation: "localStorage",
storeAuthStateInCookie: false,
}
});
const silentRequest = {
scopes: ["https://xxxxxx.onmicrosoft.com/webapi/access_as_user"],
loginHint: "me@email.com"
};
const loginResponse = await msalInstance.ssoSilent(silentRequest);

</script>

在Azure AD B2C上,配置为管理比;认证的在隐性赠款和混合流动>ID令牌(用于隐式和混合流)已检查。

我也认为ssoSilent方法不再被推荐了。

当我运行代码时,我有错误不安全尝试启动导航为帧原点xxx到/授权端点,如果它试图重新认证用户,而不是从cookie中挑选它。

如何从登录服务器端的用户获取access_token客户端?

默认情况下,访问令牌不能在应用程序之间共享。您可以通过身份验证(需要id令牌)和安全(通过HTTPS)与api共享令牌。从安全的角度来看,一个更好的选择是共享一个刷新令牌,它可以比访问令牌更少的设置来撤销。

关于iframe错误,/authorize端点将始终作为任何静默的一部分被到达。尝试使用prompt=none的交互式请求来避免此类错误。

最新更新