일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- c#
- dbContext
- Config
- scanner
- error
- Request
- ViewModel
- lazy loading
- intellij
- minimalAPI
- Store
- mac
- JavaScript
- 스냅잘찍음
- vscode
- .net
- 대전본식영상
- ORM
- 명시적외래키
- JSON
- extjs
- 라도무스dvd
- React
- c#코딩의기술실전편
- LINQ
- 상속
- EFCore
- extraParams
- 코드프로그래머스
- 에스가든스냅
- Today
- Total
ejyoo's 개발 노트
닷넷코어의 인증과 인가 본문
지난시간 회고
* API 만들고 스웨거 API 뷰어로 보기
--
* 실제 DB 연동 - appsetting 설정
* 도커 설치 - 이미지 다운 - 컨테이너 올리고 - 도커돌리기 - db 서버 실행
* 도커 설정 docker 관련 yml
* docker compose up -d : 백그라운드에서 설정된 도커 정보를 실행하겠다.
* postman 으로 만든 api를 실행시켜 테스트 한다 / 또는 swagger
--
** front 와 연동할 login api를 만듬
// login api
app.MapGet("/login", (HttpContext context) => {
return true;
});
* 닷넷 빌드 및 닷넷 런 하여 실행
* postman에서 주소 입력하고 실행
* *인증위한 쿠키 설정
* 코드작성 (빌드 서비스)
// ttl
// 권한 사용할 미들웨어 서비스 추가
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options => {
options.ExpireTimeSpan = TimeSpan.FromMinutes(3);
options.SlidingExpiration = true;
options.LoginPath = "/Signin";
options.AccessDeniedPath = "/Forbidden";
});
builder.Services.AddAuthorization();
app.UseAuthentication(); // 인증
app.UseAuthorization(); // 권한
// login api
app.MapGet("/login", async (HttpContext context) => {
// 인증처리 추가
//1. 알아서 리스폰스 헤더에 알아서 쿠키를 만들어줌? context가 제공해주는 권한 설정을 사용함
var claims = new List<Claim>{
new Claim(ClaimTypes.Name, "ejyoo")
};
var claimsIndentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); // 스키마 이름 동일하게 해야함.
await context.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal: new ClaimsPrincipal(claimsIndentity));
return true;
});
* 쿠키확인
* 만약 자동완성 안될때 오미샤프 확인? (씨샵 익스텐션 = 오미샤프)
* 쿠키테스트
- 쿠키확인용 api 생성 후 서비스 엪피아이 확인
// 쿠키 확인용 api
app.MapGet("/me", (HttpContext context, ClaimsPrincipal principal) => {
return $"Hello, {principal.Identity.Name}";
});
* 확인
이름이 안나온다면 3분이 지나서임
다시 로그인 하고 실행해보면 보일것임
* 특정 서비스 실행 시 로그인이 되어야 접근 가능하게 설정
특정 서비스 인증이후 접근하도록 설정
app.MapGet("/todoitems", async (AppDbContext db) =>
await db.Todos.ToListAsync()).RequireAuthorization();
* 3분후 실행해보면 302뜨고 signin 페이지 이동 되는지 확인
- 확인할 때 스웨거 404 개발자 도구는 302
- 로그인 안될 시 로그인 패스로 넘기도록 설정되어서 싸인인으로 들어감
* admin 으로 설정
.RequireAuthorization(p => p.RequireRole("admin"));
----- 여기까지가 dotnet core의 인증과 인가 이야기임.
----- 쿠키 말고 제이떠블유 토큰을 쓰겠다 또는 다른 인증 도구를 쓰겠다 등 여러가지로 커스텀 가능
-- 이렇게 인증과 인가를 했다라고 하면됨
* 어드민 통과 처리
var claims = new List<Claim>{
new Claim(ClaimTypes.Name, "ejyoo"),
new Claim(ClaimTypes.Role, "admin"),
};
// login api
app.MapPost("/login", async (HttpContext context, UserDto usetDto) => {
// 인증처리 추가
//1. 알아서 리스폰스 헤더에 알아서 쿠키를 만들어줌? context가 제공해주는 권한 설정을 사용함
var claims = new List<Claim>{
new Claim(ClaimTypes.Name, "ejyoo")
new Claim(ClaimTypes.Name, "admin")
};
var claimsIndentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); // 스키마 이름 동일하게 해야함.
await context.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal: new ClaimsPrincipal(claimsIndentity));
return true;
});
* 다시 로그인하고 todo 조회 해서 뜨는지 확인
나중에는 실제 사용자 패스를 받아 처리해야됨
* 유저 디티오 생성
public class UserDto
{
public string Id { get; set; }
public string PassWord {get; set; }
}
* 유저 디티오 인자 받아서 처리
// login api
app.MapPost("/login", async (HttpContext context, UserDto dto) => {
// 인증처리 추가
//1. 알아서 리스폰스 헤더에 알아서 쿠키를 만들어줌? context가 제공해주는 권한 설정을 사용함
var claims = new List<Claim>{
new Claim(ClaimTypes.Name, "ejyoo"),
new Claim(ClaimTypes.Role, "admin"),
};
// DB 조회 및 Password 확인
// db 조회 후 claims 설정
var claimsIndentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); // 스키마 이름 동일하게 해야함.
await context.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal: new ClaimsPrincipal(claimsIndentity));
return true;
});
* 로그아웃 api 작성
app.MapGet("/logout", async (HttpContext context) => {
await context.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
return true;
});
* 쿠키 빠지는지 확인
?????
'BackEnd > .Net Core' 카테고리의 다른 글
EF Core Context 로 조회 시, 객체에 자동으로 연계되어 조회되는 이유 (0) | 2023.08.25 |
---|---|
EF Core DbContext 의 로딩방식 (0) | 2023.08.23 |
MinimalAPI에 대해서.. (0) | 2023.06.21 |
명시적 외래키 작성할 때 virtual 타입을 쓰는 이유 (0) | 2023.06.21 |
Minimal API 만들기 (0) | 2023.06.02 |