Путь не был для разрешенной конечной точки CORS IdentityServer от Blazor, но работает в Почтальоне - PullRequest
0 голосов
/ 16 октября 2019

Имейте API базы данных пользователей Identity с IdentityServer4 и клиентом Blazor в отдельных проектах. Я могу зарегистрировать нового пользователя через почтальона. При выполнении приведенного ниже кода в клиенте Blazor (для мастеринга и обучения)

@page "/registrer"
@using Models
@using System.Net.Http
@using IdentityModel.Client
@inject HttpClient Http

    <EditForm Model="@registerUserModel" OnValidSubmit="@HandleValidSubmit">
        <DataAnnotationsValidator />
        <ValidationSummary />

        <InputText id="email" type="email" @bind-Value="@registerUserModel.Email" />
        <InputText id="password" type="password" @bind-Value="@registerUserModel.Password" />
        <InputText id="confirmPassword" type="password" @bind-Value="@registerUserModel.ConfirmPassword" />

        <button type="submit">Registrer deg</button>
    </EditForm>

@code {
    private RegisterUserModel registerUserModel = new RegisterUserModel();

    public async Task HandleValidSubmit()
    {
        var newUser = new RegisterUserModel
        {
            Email = registerUserModel.Email,
            Password = registerUserModel.Password,
            ConfirmPassword = registerUserModel.ConfirmPassword
        };

        var client = new HttpClient();

        var response = await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
        {
            Address = "https://localhost:5001/connect/token",

            ClientId = "client",
            ClientSecret = "511536EF-F270-4058-80CA-1C89C192F69A",
            Scope = "api1"
        });

        Http.SetBearerToken(response.AccessToken);

        await Http.PostJsonAsync("https://localhost:5001/register", newUser);
    }
}

Я могу получить токен доступа и проверить клиент Blazor, но затем я получаю эту ошибку

dbug: IdentityServer4.Hosting.CorsPolicyProvider [0] CORS-запрос сделан для пути: / зарегистрировать из источника: http://localhost:60013, но был проигнорирован, поскольку путь не был для разрешенной конечной точки IdentityServer CORS

Почему? Когда это работает в Почтальоне и нет политики CORS. Попытался разрешить клиенту AllowedCorsOrigins, просто чтобы проверить.

Ответ

Безопасность браузера не позволяет веб-странице отправлять запросы в другой домен, чем тот, который обслуживал веб-страницу. Это ограничение называется политикой того же происхождения. Политика того же происхождения не позволяет вредоносному сайту читать конфиденциальные данные с другого сайта. Чтобы отправлять запросы от браузера к конечной точке с другим источником, конечная точка должна разрешить совместное использование ресурсов между источниками (CORS).

И хранить клиентские секреты в SPA или мобильном приложении не рекомендуется, так каккаждый пользователь может видеть и манипулировать всем кодом.

1 Ответ

2 голосов
/ 16 октября 2019

Убедитесь, что вы настроили политику CORS в своем методе ConfigureServices в IS4 API, что-то вроде этого:

services.AddCors(options =>
        {
            options.AddPolicy("CorsPolicy",
                builder => builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader());
        });

Также убедитесь, что вы добавили свою политику в метод Configure:

app.UseCors("CorsPolicy");
...