Azure AD B2C OAuth2如何以静默方式刷新访问令牌

时间:2017-04-13 08:41:53

标签: asp.net-mvc oauth-2.0 owin access-token azure-ad-b2c

我们使用 Azure AD B2C 通过 OWIN (Microsoft.Owin.Security)对ASP.NET MVC应用程序中的用户进行身份验证。

我们正试图找到一种方法来静默刷新访问令牌(access_token),以避免我们正在做的多次AJAX调用失败。它们中的大多数都是由我们使用的组件(DevExpress)通过回调自动触发的,因此我们几乎无法控制它们。 我们找到的一个解决方案是Vittorio Bertocci在他的博客上描述的解决方案:http://www.cloudidentity.com/blog/2016/07/25/controlling-a-web-apps-session-duration-2/

AccountController.cs

public void ForcedSignIn()
{
    HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties {RedirectUri = "/Account/AfterForcedSignIn"}, "OUR_B2C_SIGNIN_POLICY_ID");
}

_Layout.cshtml

<script>
setInterval(function() {
          @if (Request.IsAuthenticated)
          {
            <text>
              var renewUrl = "/Account/ForcedSignIn";
              var element = document.getElementById("renewSession");
              console.log("sending request to: " + renewUrl);
              element.src = renewUrl;
            </text>
          }
        },
        1000 * 20
      );
</script>

<body>
<iframe id="renewSession" style="height: 600px; width: 600px;"></iframe>

AfterForcedSignIn.cshtml

@{
  Layout = null;
}

然而,对https://login.microsoftonline.com的调用失败,因为它无法嵌入到iFrame中(即使我们将“prompt”参数指定为“none”)。 call fail

请参阅我们在Edge中获得的消息,例如: edge iframe error

有没有办法避免这个问题(我们在调用登录页面时是否缺少参数或其他内容)?或者它是否存在另一种解决方案?

谢谢, Léo

1 个答案:

答案 0 :(得分:0)

If you use MSAL they have an AzquireTokenSilently method that you could use to refresh the user

https://github.com/AzureAD/microsoft-authentication-library-for-dotnet