Wie werden OwinContext.Request.Path und PathBase ausgefüllt?

Ich schreibe meine eigene OWIN-Middleware für den OpenID Connect-Autorisierungscode-Fluss, basierend auf anderen Beispielen im Katana-Projekt.

Als Teil davon muss ich ein paar URIs erstellen, zB einen Redirect URI und eine Return URL.

Andere Beispiele in Katana verknüpfen dazu Teile aus der aktuellen Anforderung, z. B. in CookieAuthenticationHandler

loginUri =
    Request.Scheme +
    Uri.SchemeDelimiter +
    Request.Host +
    Request.PathBase +
    Options.LoginPath +
    new QueryString(Options.ReturnUrlParameter, currentUri);

Meine Frage ist, welche Regeln bestimmen, was in den beiden Pfadeigenschaften endet:

OwinContext.Request.Path
OwinContext.Request.PathBase

Ich habe versucht, diese Eigenschaften zu überprüfen, während die Anforderung verschiedene Handler in der folgenden Pipeline durchläuft.

"https://localhost/Client/login" // Where Client is a virtual directory in IIS

Das Ergebnis

Im zugeordneten Handler für / login ist PathBase = "/Client/Login"Abe Wenn die Anforderung die ApplyResponseChallengeAsync-Methode in meinem QuillCodeFlowHandler auf dem Rückweg für dieselbe Anforderung erhält, PathBase = "/ Client" und Path = "/Login"

So ohne die "Regeln" zu kennen, nach denen diese Werte ausgefüllt und später geändert werden, ist es schwierig, URIs mit ihnen zu erstellen. Wenn jemand erklären kann, wird sehr geschätzt.

Ein Auszug meiner Konfiguration ist:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = CookieAuthenticationDefaults.AuthenticationType,
    LoginPath = new PathString("/Login")
});

app.UseQuillCodeFlowAuthentication(new QuillCodeFlowOptions());

app.Map("/login", map =>
{
   map.Run(async ctx =>
   {
     if (ctx.Authentication.User == null ||
     !ctx.Authentication.User.Identity.IsAuthenticated)
     {                        
       var authenticationProperties = new AuthenticationProperties();
       [...]
       ctx.Authentication.Challenge(authenticationProperties,
                                    QuillCodeFlowDefaults.AuthenticationType);  

DasOWIN Spezifikation gibt eine Erklärung und die Microsoft.Owin.Host.HttpListener.GetPathAndQuery-Methode scheint dort zu sein, wo die Pfadvariablen anfänglich festgelegt werden.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage