我正在使用Azure B2C配置一个身份提供程序(LinkedIn)。我有一个Web API(b2c bearer auth)和一个Web App MVC(b2c Open Id)。
我正在尝试创建持久登录 - 这意味着用户可以每90天从给定的设备+浏览器通过LinkedIn登录一次。
我最接近的是当我在网络应用中添加IsPersistent = true代码以启用它时:
更新:更新了基于Azure B2C GA的代码。为了实现我在预览中所处的位置,我仍然使用自定义授权属性,但代码已更新:
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.HttpContext.GetOwinContext().Authentication.Challenge(
new AuthenticationProperties()
{
IsPersistent = true
});
base.HandleUnauthorizedRequest(filterContext);
}
然而,这只有约1小时有效。也许它是跟随Access&身份证政策?没有刷新令牌的界限 - 我不确定为什么“IsPersistent”只有1个小时。
因此导致了这些问题:
任何想法或输入都会很棒!
答案 0 :(得分:1)
执行以下操作后,我已经能够与B2C建立持久会话:
自定义授权属性
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.HttpContext.GetOwinContext().Authentication.Challenge(
new AuthenticationProperties()
{
IsPersistent = true
});
base.HandleUnauthorizedRequest(filterContext);
}
使用Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory而不是BootstrapContext(基本上使用了GA前代码示例(查看更改历史记录) - > https://github.com/AzureADQuickStarts/B2C-WebApp-WebAPI-OpenIDConnect-DotNet)。 ADAL库处理获取对我的代码透明的正确令牌。
实施自定义TokenCache(基于EFADAL示例:https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-multitenant-openidconnect/blob/master/TodoListWebApp/DAL/EFADALTokenCache.cs)
更改了Startup.Auth.cs:
return new OpenIdConnectAuthenticationOptions
{
MetadataAddress = String.Format(aadInstance, tenant, policy),
AuthenticationType = policy,
UseTokenLifetime = false,
ClientId = clientId,
RedirectUri = redirectUri,
PostLogoutRedirectUri = redirectUri,
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthenticationFailed = OnAuthenticationFailed,
AuthorizationCodeReceived = OnAuthorizationCodeReceived,
},
Scope = "openid offline_access",
ResponseType = "code id_token",
TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
SaveSigninToken = true,
},
}