Имейте 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 или мобильном приложении не рекомендуется, так каккаждый пользователь может видеть и манипулировать всем кодом.