У меня есть существующий веб-сайт 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)
}
});