베어러 토큰과 쿠키 인증을 함께 사용
인증을 위해 전달자 토큰 을 사용하는 단일 페이지 앱 (MVC5 SPA 템플릿 기반)이 있습니다.
이 사이트에는 또한 보안이 필요하지만 쿠키 인증을 사용하는 두 개의 기존 MVC 페이지가 있습니다 .
Startup.Auth에서 두 가지 유형의 인증을 모두 활성화 할 수 있습니다.
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOAuthBearerTokens(OAuthOptions);
그러나 이것은 AJAX 요청이 SPA에서 전송 될 때마다 헤더 와 쿠키 의 베어러 토큰을 모두 전송한다는 점에서 부작용이있는 것 입니다.
내가 원하는 행위 동작 은 WebAPI 호출에는 베어러 토큰 만 사용하고 MVC 호출에는 쿠키 만 사용한다는 것입니다.
또한 MVC 호출이 승인되지 않은 경우 (CookieAuthenticationOption으로 설정) 로그인 페이지로 리디렉션되기를 원하지만 API 호출을 할 때 발생하는 것을 선언합니다.
한 응용 프로그램 내에서 전형적인 유형의 혼합 모드 인증을 있습니까? 아마도 경로 / 경로 필터를 통해?
나는 문서 해결 생각한다.
Startup.Auth는 OWIN 파이프 라인을 연결하는 방법에 쿠키와 토큰을 포함하는 것이 옳습니다. 그러나 쿠키 옵션에 대한 한 가지 변경 사항은 적용해야하는 인증 유형을 지정합니다.
CookieOptions = new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie
};
그런 다음 토큰 만 사용하도록 WebAPI를 구성해야합니다.
public static void Configure(HttpConfiguration config)
{
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
}
이것은 내가 원하는 것을 달성하는 것입니다. WebAPI는 베어러 토큰 만 사용하고 쿠키는 사용하지 않습니다. 기존 MVC 페이지는 로그인하면 쿠키를 사용합니다 (AuthenticationManager 사용).
http-only 모드에서 jwt 토큰을 쿠키 (여기서는 내 jwt 토큰 쿠키 이름은 "access_token")에 추가하고 이와 같은 미들웨어를 만들 수 있습니다.
public class JwtCookieMiddleware
{
private readonly RequestDelegate _next;
public JwtCookieMiddleware(RequestDelegate next)
{
_next = next;
}
public Task Invoke(HttpContext ctx)
{
if (ctx.Request.Cookies.TryGetValue("access_token", out var accessToken))
{
if (!string.IsNullOrEmpty(accessToken))
{
string bearerToken = String.Format("Bearer {0}", accessToken);
ctx.Request.Headers.Add("Authorization",bearerToken);
}
}
return this._next(ctx);
}
}
public static class JwtCookieMiddlewareExtensions
{
public static IApplicationBuilder UseJwtCookie(this IApplicationBuilder build)
{
return build.UseMiddleware<JwtCookieMiddleware>();
}
}
그리고 다음과 같이 시작시 미들웨어를 사용합니다.
app.UseJwtCookie();
app.UseAuthentification();
app.UseMvc();
위 코드는이 요청에 토큰 쿠키가있는 경우 http 요청 헤더에 jwt 토큰을 추가합니다.
참고 URL : https://stackoverflow.com/questions/20953738/using-bearer-tokens-and-cookie-authentication-together
'ProgramingTip' 카테고리의 다른 글
| React Native에서 SVG 파일을 표시하는 방법은 무엇입니까? (0) | 2020.11.25 |
|---|---|
| 목표 C : 텍스트 파일 읽기 (0) | 2020.11.25 |
| JSON 텍스트는 최소한 두 개의 옥텟을 포함해야합니다. (0) | 2020.11.25 |
| 왜 — yaml 파일에서 (3 개의 대시 / 하이픈)? (0) | 2020.11.25 |
| CSS에서 색상 코드 대신 색상 이름을 사용하는 데 단점이 있습니까? (0) | 2020.11.25 |