<AuthorizeView>在Visual Studio中本地运行但不在IIS上运行时可以工作吗?

时间:2019-11-28 23:39:31

标签: asp.net iis windows-authentication blazor

我使用Visual Studio 2019创建了一个新的Blazor服务器端应用程序。我选择了Windows身份验证。

以下组件(\BlazorApp1\BlazorApp1\Shared\LoginDisplay.razor)显示“您好,域\用户名!”在应用程序浏览器页面的右上方。

<AuthorizeView>
    Hello, @context.User.Identity.Name!
</AuthorizeView>

然后将其发布到同一Windows域(公司Intranet网络)中Windows Server 2019 R2上的IIS。但是,浏览页面不会在?中显示消息?

客户端身份验证信息如何传递到Blazer服务器?

1 个答案:

答案 0 :(得分:0)

Microsoft文档上有一个很好的示例,用于获取身份验证用户详细信息:

@page "/"
@using Microsoft.AspNetCore.Components.Authorization
@inject AuthenticationStateProvider AuthenticationStateProvider

<button @onclick="@LogUsername">Write user info to console</button>

@code {
    private async Task LogUsername()
    {
        var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
        var user = authState.User;

        if (user.Identity.IsAuthenticated)
        {
            Console.WriteLine($"{user.Identity.Name} is authenticated.");
        }
        else
        {
            Console.WriteLine("The user is NOT authenticated.");
        }
    }
}

要回答

  

如何将客户端身份验证信息传递给Blazer   服务器?

如果过程逻辑需要身份验证状态数据(例如,执行用户触发的操作时),请通过定义任务类型的级联参数来获取身份验证状态数据:

@page "/"

<button @onclick="@LogUsername">Log username</button>

@code {
    [CascadingParameter]
    private Task<AuthenticationState> authenticationStateTask { get; set; }

    private async Task LogUsername()
    {
        var authState = await authenticationStateTask;
        var user = authState.User;

        if (user.Identity.IsAuthenticated)
        {
            Console.WriteLine($"{user.Identity.Name} is authenticated.");
        }
        else
        {
            Console.WriteLine("The user is NOT authenticated.");
        }
    }
}

有关详细信息,请参见:

https://docs.microsoft.com/en-us/aspnet/core/security/blazor/?view=aspnetcore-3.0&tabs=visual-studio