Blazor Server集成Azure AD B2C:登录后返回原请求页面
解决Blazor Server Azure AD B2C登录后返回原请求页面的问题
你的核心问题是登录链接未传递当前访问页面的地址,导致Azure AD B2C完成认证后无法跳转回原页面。以下是具体解决方案:
1. 动态传递ReturnUrl到登录链接
在使用AuthorizeView的Razor组件中,通过NavigationManager获取当前页面URI,将其作为returnUrl参数拼接在登录链接后:
@inject NavigationManager NavManager <AuthorizeView> <Authorized> <!-- 已登录时展示的页面内容 --> <h2>Registration Wizard - Step 02</h2> <!-- 你的业务内容 --> </Authorized> <NotAuthorized> <!-- 生成带ReturnUrl的登录链接,对URI转义避免编码问题 --> <a href="@($"MicrosoftIdentity/Account/SignIn?returnUrl={Uri.EscapeDataString(NavManager.Uri)}")">登录以继续</a> </NotAuthorized> </AuthorizeView>
2. 确保认证配置与参数匹配
你的启动配置中options.ReturnUrlParameter = "returnUrl"是正确的,因为Microsoft Identity UI默认使用该参数名,保持当前配置即可。
另外需确认Azure AD B2C应用注册中的**回复URL(Redirect URI)**已正确配置为https://<你的应用域名>/signin-oidc,这是认证流程完成后接收回调的必要地址。
3. 可选:使用[Authorize]属性自动处理重定向
如果页面需要强制登录,可直接在Razor组件上添加[Authorize]属性,Blazor会自动触发登录重定向并携带当前页面的returnUrl:
@page "/registrationwizard/02" @attribute [Authorize] <!-- 页面内容 --> <h2>Registration Wizard - Step 02</h2>
这种方式无需手动编写登录链接,未登录用户访问时会自动跳转到登录页,完成认证后直接返回原页面。
关键说明
之前登录后跳转到默认页面,是因为登录请求未携带returnUrl参数,认证服务无法得知需要跳转回哪个页面。只要确保登录链接包含正确的returnUrl,且认证配置中的参数名一致,就能解决问题。
内容的提问来源于stack exchange,提问作者Sam Vanhoutte
相关产品推荐
相关产品推荐

