用户登录后如何在 Blazor 服务器端应用程序中检索用户声明?

时间:2021-02-19 13:35:54

标签: azure-ad-b2c blazor-server-side

我有一个 Blazor 服务器应用程序和一个 AD B2C 身份验证。我已经配置了 Azure,应用程序运行良好。我还可以使用以下代码查看声明。

<AuthorizeView>
    <Authorized>
        <table style="border: 1px solid black;">
            <tr style="border: 1px solid black; padding: 2px;">
                <th style="border: 1px solid black; padding: 2px;">Claim Type</th>
                <th style="border: 1px solid black; padding: 2px;">Value</th>
            </tr>

            @foreach (var item in context.User.Claims)
            {
                <tr style="border: 1px solid black; padding: 2px;">
                    <td style="border: 1px solid black; padding: 2px;">@item.Type</td>
                    <td style="border: 1px solid black; padding: 2px;">@item.Value</td>
                </tr>
            }
        </table>
    </Authorized>
</AuthorizeView>

我想访问 C# 类中的用户声明(不在 razor 文件中)并保存在数据库中。我怎样才能做到这一点?声明是否存储在像 HttpContext 这样的全局对象中,我可以从中检索这些声明?

1 个答案:

答案 0 :(得分:2)

您可以使用 AuthenticationStateProvider 并通过 GetAuthenticationStateAsync 方法获取用户声明。 样本将是这样的

public class Temp
{
    private readonly AuthenticationStateProvider _auth;

    public Temp(AuthenticationStateProvider auth)
    {
        _auth = auth;
    }

    public async Task GetClaims()
    {
        var authState = await _auth.GetAuthenticationStateAsync();
        var userClaims = authState.User.Claims;
    }
}