Ich habe zwei Hauptprojekte in meiner Web-Anwendung:WebAPI owin verwendet Token und Cookie
- WebAPI Projekt als Back-End-Authentifizierung und Autorisierung für das Webprojekt zu dienen, indem OWIN 2 mit Inhaber Token.
- Web-Projekt verwendet Angularjs.
Das Webprojekt wie erwartet funktioniert (Authentifizierung und Autorisierung arbeiten)
Methode: Laden Token an local, und senden Sie es Abfangjäger mit jeder Anfrage.
Jetzt möchte ich dem WebApi-Projekt Authentifizierung und Autorisierung hinzufügen, die anderen Modulen wie Hangfire, Elmah und Hilfeseiten dienen würde. Ich habe die gleiche Login-Logik hinzugefügt, die funktioniert (Autorisierung) und dann zur Dashboard-Seite (mit Angularjs) umgeleitet wird, die funktioniert.
Aber kommen wir zu einer anderen Seite (einer der genannten Module) nicht funktioniert nicht tun work.By. Der Benutzer vom Owin Kontext immer null/leer (siehe Code)
Für mein Verständnis, ich muss irgendwie das Token bei jeder Anfrage senden, was hier nicht passiert.
Fragen:
Wie kann ich das (Senden/getting das Token) erreichen?
Wenn Cookie der einzige/besserer Ansatz ist ↴
Wie kann ich Cookies für Projekt 1 und Token für Projekt integrieren 2? (Versucht, Cookies zu verwenden, aber es scheint, dass ich es falsch mache, oder tut sie arbeiten gleichzeitig mit Inhaber Token)
Code:?
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30),
Provider = new SimpleAuthorizationServerProvider(),
RefreshTokenProvider = new SimpleRefreshTokenProvider()
};
app.UseOAuthAuthorizationServer(OAuthServerOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
GlobalConfiguration.Configure(WebApiConfig.Register);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
AreaRegistration.RegisterAllAreas();
app.UseHangfire(hangfireConfig =>
{
config.UseAuthorizationFilters(
new AuthorizationFilter { Users = "admin, superuser", Roles = "advanced" },
new ClaimsBasedAuthorizationFilter("name", "value")
);
hangfireConfig.UseSqlServerStorage("Context");
hangfireConfig.UseServer();
});
}
ich zu Testzwecken versucht:
public class HFAuthorizationFilter : Hangfire.Dashboard.IAuthorizationFilter
{
public bool Authorize(IDictionary<string, object> owinEnvironment)
{
var context = new OwinContext(owinEnvironment);
if (context.Authentication.User == null)
return false;//Always null
return context.Authentication.User.HasClaim(ClaimTypes.Role, "SuperAdmin")
|| context.Authentication.User.HasClaim(ClaimTypes.Role, "Admin");
}
}
und in Konfiguration:
app.UseHangfire(hangfireConfig =>
{
hangfireConfig.UseAuthorizationFilters(
new HFAuthorizationFilter()
);
hangfireConfig.UseSqlServerStorage("Context");
hangfireConfig.UseServer();
});
Mögliche doppelte: Passing and verifying the OWIN Bearer token in Query String in WebAPI
Es ist alt, aber ich glaube nicht, Sie richtig verstanden. Es gibt einige Anfragen, die ich nicht initiiere oder nicht kontrollieren kann, aber ich muss in der Lage sein, das Token zu übergeben. –