OAIN2를 사용하여 사용자를 인증하기 위해 OWIN 미들웨어를 사용하여 Visual Studio 2012에서 최근에 Web API 2 프로젝트를 시작했습니다. this tutorial (Token Based Authentication)에 설명 된대로 토큰 기반 인증을 통합했습니다. 인증 부분은 훌륭하게 작동합니다. 몇 가지 테스트 API 메소드를 추가했으며 API 문서에 대해 Swagger를 연결하려고했습니다. Swagger API 호출이 권한 부여에 실패하는 것을 제외하고는 그 부분도 작동합니다.POST OAuth2 인증 요청을 위해 Web API 2에서 Swagger를 구성하는 방법은 무엇입니까?
조사한 결과, OWIN 미들웨어에 Swagger를 연결하는 방법에 대해 Erik Dahl's post이 발견되었습니다. 게시물에 따라 Swagger를 구성한 후에 각 API 메소드 옆에있는 Swagger UI에서 인증 버튼을 볼 수 있습니다. 그러나 인증을 시도 할 때 Swagger 내의 인증은 GET 요청을 사용하여 수행됩니다. 웹 API 인증은 POST 요청이 필요합니다. Swagger를 구성하여 인증 요청을 POST로 할 수 있습니까? 그렇지 않은 경우 내 API가 토큰 인증을위한 GET 요청을 수락하도록 허용해야합니까? 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
참고 : 요청은 여전히 내 인증 논리에 부딪치지 만 POST 요청에서만 client_id 및 client_secret은 GET 요청에 전달되지 않습니다. 여기
httpConfig
.EnableSwagger(c =>
{
c.SingleApiVersion("v1", "Sample API");
c.ApiKey("token")
.Description("API Key Authentication")
.Name("Bearer")
.In("header");
c.OAuth2("oauth2")
.AuthorizationUrl("/oauth/token")
.Flow("implicit")
.Description("OAuth2 authentication")
.Scopes(scopes =>
{
scopes.Add("sampleapi", "Sample API");
});
c.OperationFilter<AssignOAuth2SecurityRequirements>();
})
.EnableSwaggerUi(c =>
{
c.EnableOAuth2Support(
clientId: "Sample_App",
clientSecret: "xxxxx",
realm: "test-realm",
appName: "Swagger UI");
});
그리고 내 OAuth는 설정은 다음과 같습니다 :
app.CreatePerOwinContext<ApiClientRepo>(ApiClientRepo.Create);
app.CreatePerOwinContext<MeetingRegistrantRepo>(MeetingRegistrantRepo.Create);
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
//For Dev enviroment only (on production should be AllowInsecureHttp = false)
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/oauth/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = new CustomOAuthProvider(),
AccessTokenFormat = new CustomJwtFormat("http://localhost:51071"),
RefreshTokenProvider = new SimpleRefreshTokenProvider()
};
// OAuth 2.0 Bearer Access Token Generation
app.UseOAuthAuthorizationServer(OAuthServerOptions);
Andrei, 답안의 기사가 내 목표에 대한 가능한 해결 방법을 제공하지만 필자는 모든 수하물을 프로젝트에 추가하고 싶지 않습니다. 그것은 작은 프로젝트이고 Swagger 설정을 수정하기위한 쉬운 해결책이 없다면 웹 API의 도움말 페이지 만 사용할 것이라고 생각했습니다. API 문서에 충분한 정보를 제공합니다. 나는 그 길을 대신 택할 것이라고 믿는다. 그리고 네, 동의합니다. POST에서 GET으로 인증 방법을 변경하지 않을 것입니다. – Sebbo