如何在HTTP请求的标头中添加承载令牌?

时间:2019-08-13 16:52:11

标签: c# api jwt authorization blazor

我在弄清楚如何设置以授权为密钥,以承载令牌为值的授权标头方面很麻烦。

我已经完成了内置身份验证的Web API。我已经在邮递员上对其进行了测试,并且一切正常。问题出在邮递员上,我将令牌副本通过它传递到新的键和值,在站点中,我不确定如何在Blazor项目中更改这些值。

http://testapi.com/api/token/ {username} / {password}处输入Get the API时,API会发回一个代码,我需要将该代码放入标头中。

login.razor

@page "/"
@inject HttpClient Http

<h1>Hello, world!</h1>

Welcome To The New Site

<EditForm Model="@use" OnValidSubmit="@HandleValidSubmit" OnInvalidSubmit="@HandleInvalidSubmit" Context="EditFormContext">
    <DataAnnotationsValidator />
    <DxFormLayout>
        <DxFormLayoutItem Caption="Username:" ColSpanMd="6">
            <Template>
                <DxTextBox @bind-Text="@use.username" />
            </Template>
        </DxFormLayoutItem>
        <DxFormLayoutItem Caption="Password:" ColSpanMd="6">
            <Template>
                <DxTextBox @bind-Text="@use.password" />
            </Template>
        </DxFormLayoutItem>
        <DxFormLayoutItem ColSpanMd="12">
            <Template>
                <ValidationSummary />
            </Template>
        </DxFormLayoutItem>
        <DxFormLayoutItem ColSpanMd="12">
            <Template>
                <button type="submit">Submit</button>
            </Template>
        </DxFormLayoutItem>
    </DxFormLayout>
</EditForm>

@code {
        User[] token;
        User use = new User();

        async void  HandleValidSubmit()
        {
            token = await Http.GetJsonAsync<User[]>("http://testapi.com/api/token/" + use.username + "/" + use.password);
            if (token != null)
            {
                await SaveToken();
                await SetAuthorizationHeader();
                Console.WriteLine("OnValidSubmit");
            }
        }
        private void HandleInvalidSubmit()
        {
            Console.WriteLine("OnInvalidSubmit");
        }

        private async Task SaveToken()
        {

        }

        private async Task SetAuthorizationHeader()
        {

        }

    class User
    {
        public string username { get; set; }
        public string password { get; set; }
    }
}

2 个答案:

答案 0 :(得分:0)

我使用API​​ / IdentityServer4 / Blazor(服务器端)进行了类似的设置。也许您可以使用我在this stackoverflow question中发布的一些代码。

答案 1 :(得分:0)

如果您使用服务器端Blazor @PascalR。答案应该带您到正确的路径。 对于客户端Blazor:

  1. 将令牌保存到应用的全局可访问存储中。像本地存储或级联值
  2. 每次需要进行经过身份验证的ws调用时,都会从存储中获取令牌并将其添加为标头。

要将令牌保存在本地存储中,我建议使用:Blazored Local storage