Azure AD B2C ASP.NET重定向循环

snz8szmq  于 2023-02-09  发布在  .NET
关注(0)|答案(7)|浏览(174)

我们使用Microsoft Web应用程序示例https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi在前端的Umbraco中实现了Azure AD B2C
大多数时候这是正常的,但是过了一段时间,每个人都开始被重定向循环击中,重新设置网站就可以解决这个问题。
当用户使用id标记重定向回站点时,似乎有什么原因导致停止设置. aspNet.Cookies Cookie。
有什么想法吗?

wko9yo5t

wko9yo5t1#

对于那些会遇到同样问题并发现这个问题的人,我想分享一下是什么导致了我的问题,以及我是如何解决它的。
AD B2C应用程序注册需要一个RedirectURI。我忘记放置signin-oidc
所以改变:

https://localhost:5000

https://localhost:5000/signin-oidc

解决了我的问题。
这是默认值/signin-oidc,除非显式设置了其他值。

5gfr0r5j

5gfr0r5j2#

我在注销时遇到了无限循环问题,这是因为缺少对Razor页面的支持。默认的Microsoft.Identity.Web.UI注销操作使用/Account/SignedOut Razor页面作为回调URL。

var callbackUrl = Url.Page("/Account/SignedOut", pageHandler: null, values: null, protocol: Request.Scheme);

我在Asp.NET核心Web应用程序中添加了Razor支持,它修复了这个问题。

services.AddRazorPages();

以及

app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
            endpoints.MapRazorPages();
        });

谢谢。

ehxuflar

ehxuflar3#

请确保应用程序注册中的回复URL与web.config中的重定向URI匹配。尝试将这两个URL都设置为主主页URL,以确保应用程序已正确注册。此外,请确保应用程序ID和客户端ID匹配,并且在Web配置中设置了正确的租户。此租户必须是www.example.com租户。此外,onmicrosoft.com tenant. Also, ensure that your users have the right permissions for the application.
请按照我的博客和视频中的说明操作,以确保这些设置正确。https://medium.com/@marilee.turscak/reply-urls-vs-postlogoutredirecturis-in-azure-active-directory-aad-20f57a03267b
https://www.youtube.com/watch?v=A9U1VGyztEM
您也可以尝试删除应用程序并重新发布它。如果这些操作都不起作用,则实际上可能是平台本身的问题。

bnlyeluc

bnlyeluc4#

仅在Web应用程序中的TLS/SSL设置下启用HTTPS。

huus2vyu

huus2vyu5#

对我来说,这是因为我没有在我的b2c配置设置中定义范围,像这样:

"Resources": {
    "myApi": {
        "ResourceUri": "https://localhost:44361",//"https://my.ui.com",
        "ResourceScopes": [
            "https://myapp.onmicrosoft.com/my-api/Admin.Read.Write" // this was wrong, which caused my looping
        ]
    }
}
llmtgqce

llmtgqce6#

我还遇到了一个注销重定向循环。它实际上会注销,但只是陷入了一个循环。在我的情况下,我在Azure中配置的重定向URL是好的(我有/signin-oidc)。
我按照指南添加了自己的帐户控制器操作,而不是使用内置的“MicrosoftIdentity/Account/SignOut”(同时还添加了“id_token”验证来保护注销):https://learn.microsoft.com/en-us/azure/active-directory-b2c/enable-authentication-web-application-options#secure-your-logout-redirect
我的startup.cs代码符合文档,我的控制器代码如下所示(文档代码缺少“AuthenticationProperties”变量):

namespace Cosmos.WebPortal.Controllers;

[AllowAnonymous]
[Area("MicrosoftIdentity")]
[Route("[area]/[controller]/[action]")]
public class MyAccountController : Controller
{
    [HttpGet("{scheme?}")]
    public async Task<IActionResult> SignOutAsync([FromRoute] string scheme)
    {
        scheme ??= OpenIdConnectDefaults.AuthenticationScheme;

        var redirectUrl = Url.Content("~/");
        var properties = new AuthenticationProperties { RedirectUri = redirectUrl };

        //obtain the id_token
        var idToken = await HttpContext.GetTokenAsync("id_token");
        //send the id_token value to the authentication middleware
        properties.Items["id_token_hint"] = idToken;

        return SignOut(properties, CookieAuthenticationDefaults.AuthenticationScheme, scheme);
    }
}

因此,我的注销链接现在指向此控制器,例如“MicrosoftIdentity/MyAccount/SignOut”
这看起来工作的很好,没有无限循环。有点令人沮丧,因为我真的不明白的原因或差异,但它的工作。

bmp9r5qi

bmp9r5qi7#

对我来说,这是Azure B2C中过期的密钥/证书。查看网络日志以查看是否有任何消息很重要,谢天谢地,有消息告诉我确切的查找位置

相关问题