我有一个具有AzureADB2C身份验证的Blazor服务器应用程序。我将路径用于不同的项目,例如〜/ project1或〜/ project2。用户有权访问由另一个服务管理的不同项目。
未经授权的用户导航到〜/ project1时,他将被重定向到这样的登录页面
MainLayout.razor
<AuthorizeView>
<Authorized>
...
</Authorized>
<NotAuthorized>
<RedirectToLogin />
</NotAuthorized>
</AuthorizeView>
使用AzureADB2C.UI软件包中的一些经过修改的代码进行RedirectToLogin
var uri = new Uri(_navigationManager.Uri);
var redirectUri = "~" + uri.AbsolutePath;
_navigationManager.NavigateTo($"AzureADB2C/Account/SignIn?redirectUri={redirectUri}", true);
修改看起来像
[HttpGet("{scheme?}")]
public IActionResult SignIn([FromRoute] string scheme, [FromQuery] string redirectUrl)
{
scheme ??= AzureADB2CDefaults.AuthenticationScheme;
return Challenge(
new AuthenticationProperties { RedirectUri = Url.Content(redirectUrl) },
scheme);
}
AzureADB2C中的重定向URI为http://localhost:44377/signin-oidc 我在〜/页面结束。
我在这里完全迷路了,在这里看到的唯一解决方案是用于存储和恢复redirectUrl的cookie
答案 0 :(得分:1)
您可以通过在Azure AD请求中添加“ state”参数来保留应返回用户的URI,请参见https://docs.microsoft.com/en-us/azure/active-directory-b2c/openid-connect上的说明
一种实现方式:
_navigationManager.NavigateTo($"AzureADB2C/Account/SignIn?redirectUri={redirectUri}&state={your_object_as_encoded_string}", true);