Я использую IdentityServer 3 для аутентификации. Когда пользователь аутентифицируется, IdentityServer делает запрос «POST» на URL приложения клиента. Например, http://localhost/home пока все хорошо работает.Как разместить токен Antiforgery от IdentityServer 3
Приложение для моего клиента разработано в ASP.NET Core. В клиентском приложении я хочу проверить каждый запрос POST. Поэтому вместо добавления атрибута ValidateAntiForgeryToken
для каждого метода действий я создал промежуточное программное обеспечение, которое проверяет каждый запрос POST.
public class ValidateAntiForgeryTokenMiddleware
{
private readonly RequestDelegate _next;
private readonly IAntiforgery _antiforgery;
public ValidateAntiForgeryTokenMiddleware(RequestDelegate next, IAntiforgery antiforgery)
{
_next = next;
_antiforgery = antiforgery;
}
public async Task Invoke(HttpContext httpContext)
{
if (httpContext.Request.Method.ToUpper() == "POST")
{
await _antiforgery.ValidateRequestAsync(httpContext);
}
await _next(httpContext);
}
}
Проблема здесь, поскольку identityserver также делает POST, промежуточное программное обеспечение пытается проверить, что запрос, но запрос POST выдает следующее сообщение об ошибке
«Необходимое antiforgery печенье \». AspNetCore .Antiforgery.AXelvXewLHI \ "нет".
В Identity Server у меня есть пользовательская страница входа. и я установил маркер анти-подделки на странице входа.
<div ng-show="model.loginUrl">
<div class="cr-login-dialog col-md-6 col-md-offset-3">
<form name="form" method="post" action="{{model.loginUrl}}" class="form-horizontal" role="form">
<anti-forgery-token token="model.antiForgery"></anti-forgery-token>
<div class="form-group">
//user name controls goes here
</div>
<div class="form-group">
//password controls goes here
</div>
<div class="form-group" ng-show="model.allowRememberMe">
// remember me controls goes here
</div>
</form>
</div>
</div>
Ну, это проблема. Промежуточное ПО не может отличить, если запрос «POST» поступает с IdentityServer или браузера пользователя. – LP13
Тогда использование MW как места для реализации, это не правильный выбор. –
'Вы должны разделить ваше промежуточное ПО ant-xsrf только для выполнения своих запросов, а не для запросов IdentityServer .......'. Обратите внимание, что промежуточное программное обеспечение будет пытаться проверить запрос 'from' identityserver. и я бы хотел, чтобы токен POST antiforgery, когда он перенаправляет на стартовую страницу клиентского приложения – LP13