簡體   English   中英

.net 5 Azure b2c 注銷循環

[英].net 5 Azure b2c logout loop

您好,我正在嘗試在應用程序中實現 azure b2c。 登錄時一切正常。但是當我注銷時,它陷入了無限循環。 我能找到的所有示例似乎都是 .net core 3.1。

這是我的應用程序設置。

"AzureAdB2C": {
"Instance": "https://xxx.b2clogin.com",
"TenantId": "xxx",
"ClientId": "xxx",
"Domain": "xxx.onmicrosoft.com",
"SignedOutCallbackPath": "/signout/B2C_1_Normal",
"SignUpSignInPolicyId": "B2C_1_Normal",
//"CallbackPath": "/signin/B2C_1_Normal"
}

這是我的啟動。

 services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
 .AddMicrosoftIdentityWebApp(options =>
 {
     Configuration.Bind("AzureAdB2C", options);
 }).EnableTokenAcquisitionToCallDownstreamApi(new string[] { Configuration["ApiScope"] 
 })
 .AddInMemoryTokenCaches
services.AddControllersWithViews(options=>
{
    var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
    options.Filters.Add(new AuthorizeFilter(policy));
}).AddMicrosoftIdentityUI();

要退出,我只需單擊一個按鈕。

<a class="nav-link" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>

它確實讓我退出,但我被困在一個重定向循環中回到我的應用程序,然后又回到 B2C。

我嘗試在本地環境中進行測試,並且使用 AzureAdB2C 憑據從我的 Web 應用程序登錄和注銷成功地進行了測試。

以下是我遵循的步驟:

在 Portal 中創建了一個 B2C 租戶並將其鏈接到我的訂閱。

在此處輸入圖像描述

鏈接后創建了一個應用注冊,選擇如下,並使用 id 和 access token 進行身份驗證。

在此處輸入圖像描述

在此處輸入圖像描述

我已經添加了用戶流並選擇以下配置:

在此處輸入圖像描述

然后在 Visual Studio 中創建了一個 Asp.net 核心 Web 應用程序並提供我在上面創建的域和策略詳細信息

在此處輸入圖像描述

域名 - Azure AD B2C 概覽選項卡 應用程序 ID - 來自應用注冊概覽選項卡 注冊或登錄策略 - 來自用戶流概覽

復制回復 URI 並粘貼到門戶的重定向 URI 部分

在此處輸入圖像描述

這是我的appsettings.json文件

在此處輸入圖像描述

它允許我登錄並在注銷后也重定向到我的主頁:

在此處輸入圖像描述

在此處輸入圖像描述

有關更多信息,請參閱以下鏈接:

. 如何退出 Azure ADB2C |MS 問答

. 在 Azure Active Directory B2C 中配置會話行為 | 醫學博士

我遇到了同樣的問題,這是因為缺少對 Razor 頁面的支持。 默認的 Microsoft.Identity.Web.UI SignOut 操作使用 /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();
        });

或者,您可以使用自己的注銷端點,它可以使用任何操作作為注銷回調 url。

謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM