ASP에서의 사용자 인증NET Web API
어딘가에서 JSON 데이터를 소비하는 iPhone 클라이언트를 개발해야 합니다.MS의 Web API를 선택한 이유는 충분히 쉬울 것 같았기 때문입니다만, 유저 인증에 있어서는 매우 곤란합니다.
인증 , 인증 방법, 인증 방법, 사용자 인증 방법 하게 알 수 .Authorize
탓으로 ApiController
몇 시간 동안 검색한 후 방법을 찾아보세요.
이는 질문이 아니라 정확하게 이를 수행하는 방법에 대한 예시를 요청하는 것입니다.아래 페이지를 확인했습니다.
한 요구의 하지만, 「한 요구」나 「부정한 요구」의 것을 것은 .LoginController
사용자 자격 증명을 요청하고 검증할 수 있습니다.
간단한 예시를 쓰거나 올바른 방향을 가르쳐 주실 분?
몇 시간 동안 구글링을 한 후에도 로그인 화면부터 ApiController 메서드에 대한 Authorize Attribute over my apiController methods까지 사용자를 인증하는 명확한 예를 찾을 수 없었던 것이 놀랍습니다.
그 이유는 다음 두 가지 개념을 혼동하고 있기 때문입니다.
인증은 시스템이 사용자를 안전하게 식별할 수 있는 메커니즘입니다.인증 시스템은 다음 질문에 대한 답변을 제공합니다.
- 사용자는 누구입니까?
- 사용자는 정말 자신이 표현하고 있는 모습입니까?
인가는 시스템에서 제어되는 자원을 보호하기 위해 인증된 특정 사용자가 어느 수준의 액세스 권한을 가져야 하는지를 시스템이 결정하는 메커니즘입니다.예를 들어 데이터베이스 관리 시스템은 특정 개인에게 데이터베이스에서 정보를 검색할 수 있는 능력을 제공하지만 데이터베이스에 저장된 데이터를 변경할 수 없는 능력을 제공함과 동시에 다른 개인에게 데이터를 변경할 수 있는 능력을 제공하도록 설계될 수 있습니다.인증 시스템은 다음과 같은 질문에 대한 답변을 제공합니다.
- 사용자 X가 리소스 R에 액세스할 수 있는 권한이 있습니까?
- 사용자 X가 조작 P를 실행할 권한이 있습니까?
- 사용자 X는 리소스 R에 대해 P 조작을 실행할 권한이 있습니까?
Authorize
MVC 아트리뷰트다음은 다음과 같습니다.
[System.Web.Http.Authorize(Roles = "Admin, Super User")]
public ActionResult AdministratorsOnly()
{
return View();
}
위의 규칙에서는 Admin 및 Super User 역할의 사용자만 메서드에 액세스할 수 있습니다.
파일에서.config 를 사용하여 설정할 수도 .location
§:
<location path="Home/AdministratorsOnly">
<system.web>
<authorization>
<allow roles="Administrators"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
그러나 이러한 권한 부여 규칙을 실행하기 전에 현재 웹 사이트에 대해 인증을 받아야 합니다.
부정한 요구를 처리하는 방법은 설명되지만 Login Controller 등의 사용자 자격 정보를 요청하고 검증하는 방법은 명확하게 설명되지 않습니다.
여기서부터는 문제를 둘로 나눌 수 있습니다.
동일한 웹 응용 프로그램 내에서 웹 API 서비스를 사용할 때 사용자 인증
ASP 인증에 의존하기 때문에 이것이 가장 간단한 방법입니다.넷
다음은 간단한 예입니다.
Web.config
<authentication mode="Forms"> <forms protection="All" slidingExpiration="true" loginUrl="account/login" cookieless="UseCookies" enableCrossAppRedirects="false" name="cookieName" /> </authentication>
사용자는 계정/로그인 경로로 리다이렉트 됩니다.사용자 자격 증명을 요구하기 위한 커스텀컨트롤을 렌더링한 후 다음 명령을 사용하여 인증 쿠키를 설정합니다.
if (ModelState.IsValid) { if (Membership.ValidateUser(model.UserName, model.Password)) { FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); return RedirectToAction("Index", "Home"); } else { ModelState.AddModelError("", "The user name or password provided is incorrect."); } } // If we got this far, something failed, redisplay form return View(model);
크로스 플랫폼 인증
이 경우는 웹 어플리케이션 내에서 웹 API 서비스만 노출하는 경우로, 다른 클라이언트가 서비스를 소비하거나 클라이언트가 다른 웹 어플리케이션일 수도 있습니다.인터넷 애플리케이션(Win Forms, WPF, 콘솔, Windows 서비스 등)
예를 들어, 같은 네트워크 도메인(인트라넷 내)에 있는 다른 웹 응용 프로그램에서 웹 API 서비스를 사용한다고 가정합니다.이 경우 ASP가 제공하는 Windows 인증에 의존할 수 있습니다.그물.
<authentication mode="Windows" />
서비스가 인터넷에 노출되면 인증된 토큰을 각 웹 API 서비스에 전달해야 합니다.
상세한 것에 대하여는, 다음의 기사를 참조해 주세요.
사용자 이름 및 비밀번호에 대해 인증 쿠키 없이 인증하려는 경우 MVC4 Authorize 속성은 처음부터 작동하지 않습니다.단, 다음 도우미 방식을 컨트롤러에 추가하여 기본 인증 헤더를 받아들일 수 있습니다.컨트롤러 메서드의 선두부터 호출합니다.
void EnsureAuthenticated(string role)
{
string[] parts = UTF8Encoding.UTF8.GetString(Convert.FromBase64String(Request.Headers.Authorization.Parameter)).Split(':');
if (parts.Length != 2 || !Membership.ValidateUser(parts[0], parts[1]))
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "No account with that username and password"));
if (role != null && !Roles.IsUserInRole(parts[0], role))
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "An administrator account is required"));
}
이 도우미는 클라이언트 측에서HttpClient
인증 헤더가 설정되어 있는 경우:
static HttpClient CreateBasicAuthenticationHttpClient(string userName, string password)
{
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(userName + ':' + password)));
return client;
}
MVC5/Web API 프로젝트를 진행하고 있는데 Web API 메서드에 대한 승인을 받아야 합니다.인덱스 뷰가 처음 로드되면 자동으로 생성되는 'token' 웹 API 메서드를 호출합니다.
토큰을 가져오는 클라이언트 측 코드(CoffeeScript)는 다음과 같습니다.
getAuthenticationToken = (username, password) ->
dataToSend = "username=" + username + "&password=" + password
dataToSend += "&grant_type=password"
$.post("/token", dataToSend).success saveAccessToken
성공하면 다음이 호출되어 인증 토큰이 로컬에 저장됩니다.
saveAccessToken = (response) ->
window.authenticationToken = response.access_token
[Authorize]태그를 가진 Web API 메서드에 Ajax 콜을 발신해야 할 경우 다음 헤더를 Ajax 콜에 추가합니다.
{ "Authorization": "Bearer " + window.authenticationToken }
언급URL : https://stackoverflow.com/questions/11731683/user-authentication-in-asp-net-web-api
'it-source' 카테고리의 다른 글
MySQL 또는 MariaDB에 메모리 내 데이터베이스가 있습니까? (0) | 2023.04.21 |
---|---|
Microsoft Forms 2.0 오브젝트 라이브러리가 표시되지 않는 이유는 무엇입니까? (0) | 2023.04.21 |
폴더가 존재하지 않는 경우 Bash를 사용하여 폴더를 작성하려면 어떻게 해야 합니까? (0) | 2023.04.21 |
어레이가 다른 어레이의 서브셋인지 확인합니다. (0) | 2023.04.21 |
Swift enum과 관련된 값의 동일성을 테스트하는 방법 (0) | 2023.04.21 |