Как использовать веб-API ASP.NET перекрестного происхождения с ASP.NET Identity? - PullRequest
3 голосов
/ 04 апреля 2019

Я перепробовал много подходов, но не использую перекрестное происхождение в веб-API asp.net.

Я пытаюсь позвонить со своего домена mydomain.com на search.mydomain.com, но это не разрешено, поскольку перекрестное происхождение не разрешено.

Как включить перекрестный источник на моем веб-сайте? Любая помощь будет высоко оценена.

1 Ответ

3 голосов
/ 04 апреля 2019

Вот очень хорошая статья для реализации из разных источников:

https://askgif.com/blog/298/how-to-use-asp-net-web-api-cross-origin-with-asp-net-identity/

ASP.NET Web API - фантастическая часть семейства .NET (определенно есть некоторая странность, так как у нас теперь есть MVC и Web API с почти идентичными методами, но ASP.NET MVC 6 скоро появится :)). Однако получить работающее приложение SPA или мобильное гибридное (Ionic!) Приложение - не самое приятное занятие.

Разрешение перекрестных запросов

Таким образом, если вы попытались запустить API без какой-либо настройки, вы заметите, что ваш запрос перед полетом не был выполнен. Это происходит потому, что браузер хочет отправить запрос ДО вашего запроса, чтобы убедиться, что вам разрешено сделать ваш запрос.

Перво-наперво, нам нужны пакеты. У меня были версии 3.0.1 и 5.0.0 соответственно при написании этого.

Install-Package Microsoft.Owin.Cors
Install-Package Microsoft.AspNet.Cors

Во-вторых, найдите /AppStart/Startup.Auth.cs и обновите метод ConfigureAuth, добавив в него метод UseCors следующим образом:

public void ConfigureAuth(IAppBuilder app)
{
    app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

    // creates owin contexts and stuff
}

Это позволит вам делать запросы с другого сервера.

Настройка запросов на регистрацию и вход в систему

Зарегистрировать пользователя

Чтобы сделать запрос на создание пользователя, вы хотите отправить следующий JSON в / api / account / register (если вы используете маршруты идентификации по умолчанию):

var registrationData = {
    UserName: userName,
    Password: password,
    ConfirmPassword: confirmPassword
};

Логин пользователя

Чтобы сделать запрос на вход пользователя, вы хотите отправить следующий JSON в / токен со следующим JSON:

var loginData = {
    UserName: userName,
    Password: password,
    grant_type: password
};

Это может показаться немного странным. У нас нет TokenController! Что это бьет? Что ж, если вы вернетесь к своему файлу /App_Start/Startup.Auth.cs, вы увидите следующее:

// Configure the application for OAuth based flow
PublicClientId = "self";
OAuthOptions = new OAuthAuthorizationServerOptions
{
    TokenEndpointPath = new PathString("/Token"),
    Provider = new ApplicationOAuthProvider(PublicClientId),
    AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
    AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
    AllowInsecureHttp = true
};

// Enable the application to use bearer tokens to authenticate users
app.UseOAuthBearerTokens(OAuthOptions);

Этот код настраивает ответ / token.

Отправка запросов на конечные точки API с помощью [Авторизовать]

Когда вы делаете запрос на вход в систему, вы получите «access_token» в ответе. Вам нужно сохранить это значение и отправить его в виде заголовка «Авторизация», например, (если вы используете Angular):

$http.defaults.headers.common['Authorization'] = "Bearer " + authentication.access_token;

Теперь все ваши запросы будут отправляться через этот заголовок авторизации, поэтому, когда Identity аутентифицирует запрос, он устанавливает статический объект User для вашего пользователя!

Все сделано!

Это рабочий процесс для выполнения API-запросов между источниками и аутентификации. Вы нажмете на URL / token URL, чтобы получить свой токен на предъявителя и добавить его ко всем последующим запросам, требующим авторизации.

Используете AngularJS?

Если вы используете Angular или Ionic Framework, я опубликовал Gist, содержащий некоторые из описанных выше рабочих процессов для регистрации, входа в систему и выполнения авторизованных запросов. Но будьте осторожны - это не идеально. Возможно, вам придется сделать некоторую очистку. Если да, пожалуйста, дайте мне знать. А пока я постараюсь превратить его во что-то красивое и красивое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...