Аутентифицировать API с помощью токена Owin - PullRequest
0 голосов
/ 26 мая 2018

У меня есть существующий веб-сайт MVC, где использовалась аутентификация формы, и личность сохранялась в сеансе.Мы изменили код контроллера учетной записи (метод LogOn) и удалили сеанс и аутентифицировались с помощью Owin.

Request.GetOwinContext().Authentication.SignIn(properties, claimsIdentity)

При запуске он использует CookieAuthentication.

Это прекрасно работает для последующего запроса, так кактокен хранится в cookie.

Нам также необходимо отправить этот токен как носитель (или в настраиваемом заголовке), чтобы api мог аутентифицировать запрос.Поскольку API размещен на другом сервере, мы устанавливаем один и тот же ключ компьютера для MVC и WebAPI.

Однако это не работает.Есть ли лучший способ расшифровать токен и получить информацию о претензиях?Или проверить токен без проблем и разрешить запрос при аутентификации.

Веб-запуск

app.UseCookieAuthentication(new CookieAuthenticationOptions()
        {
            AuthenticationType = Auth_type,
            LoginPath = new PathString("/home/about"),
            LogoutPath = new PathString("/home/index"),
            SlidingExpiration = true,
            CookieSecure = CookieSecureOption.Never,
            CookieHttpOnly = false
        });

home / About

if (!Request.GetOwinContext().Authentication.User.Identity.IsAuthenticated)
        {
            var id = GetId() as MyIdentity;
            var prop = Getprop();
            Request.GetOwinContext().Authentication.SignIn(prop, id);
        }

Запуск API

var OAuthOptions = new OAuthBearerAuthenticationOptions
            {
                AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Passive,
                AuthenticationType = OAuthDefaults.AuthenticationType,
            };
            app.UseOAuthBearerAuthentication(OAuthOptions);

Атрибут авторизации API

public class MyAuthorizeAttribute: AuthorizeAttribute
    {
        public override void OnAuthorization(HttpActionContext actionContext)
        {
            // check identity here
            base.OnAuthorization(actionContext);
        }
    }

JS вызов API

var token = getCookie(".AspNet.ApplicationCookie");
                $.ajax({
                    type: "GET",
                    beforeSend: function (request) {
                        request.setRequestHeader("Authorization", "Bearer " + token);
                    },
                    url: "http://localhost:1231/authapi/api/values/get?id=1",

                    success: function (msg) {
                        alert("Success" + msg)
                    },
                    error: function (d) {
                        debugger;
                        alert("Error" + d.responseText)
                    }

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