Próbuję utworzyć prostą aplikację sprawdzającą koncepcję OAuth, ale utknąłem w implementacji kodu autoryzacji. Gdziekolwiek czytam, wygląda na to, że idzie w taki czy inny sposób, nigdy w rzeczywistości nie używając przepływu kodu autoryzacji. Używam następujące zasoby dla informacji:Jak zaimplementować przepływ Authorization_Code OAuth2 w Web Api przy użyciu oprogramowania pośredniego OWIN?
- https://tools.ietf.org/html/draft-ietf-oauth-v2-31
- https://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified
- http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server
Mam konfiguracji Web API i owin z niestandardowym OAuthAuthorizationServerProvider przyjąć typy hasło grant na odświeżeniu tokeny i możliwość wymiany tokena odświeżania na token dostępu. Działa to dobrze, ale chcę skonfigurować scenariusz, w którym przekierowuję przeglądarkę na serwer, aby autoryzować i przekierowywać z powrotem do klienta za pomocą kodu autoryzacji. Następnie chcę, aby klient wysłał kod autoryzacji do punktu końcowego tokenu, aby uzyskać token odświeżania. W drugim łączu pod aplikacjami serwera sieci Web próbuję pobrać aplikację web api, aby wyprowadzić kod autoryzacji z żądania jak, http://127.0.0.1/auth?response_type=code&client_id=123&redirect_uri=http://validredirect.com&scope=access, ale ja wciąż dostaję 404.
mam skonfigurowane owin następująco:
var databaseContext = new AdnsfContext();
WebApp.Start(
new StartOptions("http://127.0.0.1:7000"),
appBuilder =>
{
var httpConfig = new HttpConfiguration();
httpConfig.MapHttpAttributeRoutes();
httpConfig.SuppressDefaultHostAuthentication();
httpConfig.Filters.Add(new HostAuthenticationFilter("Bearer"));
appBuilder
.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
ApplicationCanDisplayErrors = true,
AuthorizeEndpointPath = new PathString("/auth"),
TokenEndpointPath = new PathString("/token"),
AuthorizationCodeExpireTimeSpan = TimeSpan.FromMinutes(1),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(1),
Provider = new AuthServerProvider(),
AuthorizationCodeProvider = new AuthorizationCodeProvider(),
RefreshTokenProvider = new RefreshTokenProvider(),
})
.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
AuthenticationType = "Bearer",
})
.UseCors(CorsOptions.AllowAll)
.UseWebApi(httpConfig);
});
kawałki dodałem aby umożliwić końcowy autoryzacji są właściwości dla opcji serwera auth:
AuthorizeEndpointPath = new PathString("/auth"),
AuthorizationCodeExpireTimeSpan = TimeSpan.FromMinutes(1),
AuthorizationCodeProvider = new AuthorizationCodeProvider(),
Zastąpienie w mojej implementacji rzutu AuthorizationCodeProvider nie zaimplementowano wyjątków, ale obecnie nie ma nawet trafienia żadnych punktów przerwania ustawionych w kodzie. Należy zwrócić uwagę na to, że kiedy używam listonosza do trafienia w autowy punkt końcowy, otrzymuję nagłówek serwera dla HTTPAPI/2.0, który jest inny niż wtedy, gdy po prostu nie jest coś wypalanego na tym punkcie końcowym, co oznacza, że muszę wysłać żądanie nieprawidłowo. Czy ktoś może zobaczyć problem z moją konfiguracją? Z góry dziękuję, wiem, że jest to wyraźnie moja porażka w zrozumieniu OWIN i OAuth.
IdentityServer był doskonałym zasobem. Wraz z oryginalnym oauth2 spce, IdentityServer i przykładowym serwerem autoryzacji, do którego pierwotnie się przyłączyłem, udało mi się to ustalić. –
@JoshuaBelden Czy możesz podać swoje ostateczne rozwiązanie jako odpowiedź? A przynajmniej jego znaczące części? –