我在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的交互式请求来避免此类错误。