OwinMiddleware'i nasıl geçersiz kılıyoruz ... ilk olarak kendi ara yazılımımızı Owin'in üzerine yarattık ... Sanırım yaptığınız gibi benzer bir sorun yaşadık. Bir sabiti oluşturmak için
İlk gerek: startup.Auth dosyasında OwinMiddleware
public class AuthenticationMiddleware : OwinMiddleware
{
public AuthenticationMiddleware(OwinMiddleware next) : base(next) { }
public override async Task Invoke(IOwinContext context)
{
await Next.Invoke(context);
if (context.Response.StatusCode == 400 && context.Response.Headers.ContainsKey(Constants.OwinChallengeFlag))
{
var headerValues = context.Response.Headers.GetValues(Constants.OwinChallengeFlag);
context.Response.StatusCode = Convert.ToInt16(headerValues.FirstOrDefault());
context.Response.Headers.Remove(Constants.OwinChallengeFlag);
}
}
}
public class Constants
{
public const string OwinChallengeFlag = "X-Challenge";
}
Ve geçersiz, biz
public void ConfigureAuth(IAppBuilder app)
....
app.Use<AuthenticationMiddleware>(); //Allows override of Invoke OWIN commands
....
}
Komutları
çağırır Owin ait overrid izin
Ve ApplicationOAuthProvider'da, GrantResourceOwnerCredentials'ı değiştirdik.
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
using (UserManager<IdentityUser> userManager = _userManagerFactory())
{
IdentityUser user = await userManager.FindAsync(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
context.Response.Headers.Add(Constants.OwinChallengeFlag, new[] { ((int)HttpStatusCode.Unauthorized).ToString() }); //Little trick to get this to throw 401, refer to AuthenticationMiddleware for more
//return;
}
....
Bunu yarın denerim ve eğer işe yaradıysa size onaylayacağım !! Şimdiden teşekkür ederim;) –
Hey, yaklaşımınızı deniyorum ve sorunları buluyorum. Sanırım "STTIAuthenticationMiddleware", AuthenticationMiddleware'dir ve asıl meselem, özel middleware'in hiç pipeline sırasında çağrılmamasıdır. Middleware'i 'app.Use()' ve 'app.Use (System.Type)' kullanarak yapılandırdım. Sorun nedir? –
Evet, ilk kısımda, bunlar aynı. Diğer taraftan, startup.auth'un ConfigureAuth'u çağırdığını ve ayarlamayı doğruladınız mı? –