userName 또는 userId를 매개 변수로 전달하지 않고 보안 ApiController 작업 내에서 현재 사용자를 가져 오는 방법은 무엇입니까?
우리는 보안 조치 내에 있기 때문에 이것이 가능하다고 가정합니다. 보안 작업에 있다는 것은 사용자가 이미 인증되었고 요청에 Bearer 토큰이 있음을 의미합니다. WebApi가 사용자에게 권한을 부여했기 때문에 사용자 ID를 작업 매개 변수로 전달하지 않고도 액세스 할 수있는 방법이 내장되어있을 수 있습니다.
답변
WebApi 2에서는 ApiController RequestContext.Principal
의 메서드 내에서 사용할 수 있습니다.
답변
의 User
속성을 사용하여 보안 주체에 액세스 할 수도 있습니다 ApiController
.
따라서 다음 두 문장은 기본적으로 동일합니다.
string id;
id = User.Identity.GetUserId();
id = RequestContext.Principal.Identity.GetUserId();
답변
힌트는 Webapi2 자동 생성 계정 컨트롤러에 있습니다.
getter가 다음과 같이 정의 된이 속성을
public string UserIdentity
{
get
{
var user = UserManager.FindByName(User.Identity.Name);
return user;//user.Email
}
}
UserManager를 얻으려면-WebApi2에서 -do as Romans (AccountController로 읽음)
public ApplicationUserManager UserManager
{
get { return HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>(); }
}
IIS 및 자체 호스트 모드에서 호환되어야합니다.
답변
위의 제안 중 어느 것도 나를 위해 일하지 않았습니다. 다음은 그랬습니다!
HttpContext.Current.Request.LogonUserIdentity.Name
다양한 시나리오가 있고 이것이 저에게 효과적이라고 생각합니다. 내 시나리오에는 AngularJS 프런트 엔드와 웹 API 2 백엔드 애플리케이션이 포함되었으며 둘 다 IIS에서 실행되었습니다. 두 응용 프로그램이 모두 Windows 인증 에서 독점적 으로 실행되도록 설정해야했습니다 .
사용자 정보를 전달할 필요가 없습니다. 브라우저와 IIS는 로그온 한 사용자 자격 증명을 교환하고 웹 API는 요청시 사용자 자격 증명에 액세스 할 수 있습니다 (IIS에서).
답변
Karan Bhandari의 대답은 좋지만 프로젝트에 추가 된 AccountController는 Mvc.Controller
. ApiController 변화에 사용하기 위해 그의 대답을 변환하려면 HttpContext.Current.GetOwinContext()
에 Request.GetOwinContext()
있는지 다음 2 추가 할 using
문 :
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
답변
.Net Core User.Identity.Name
에서 사용자의 이름 클레임을 가져옵니다.
답변
Asp.Identity UseManager를 사용하는 경우 자동으로 값을 설정합니다.
RequestContext.Principal.Identity.GetUserId ()
를 기반으로 IdentityUser 당신은 만드는 데 사용 IdentityDbContext을 .
사용자 정의 사용자 테이블 및 owin 토큰 전달자 인증을 구현하는 경우 친절하게 내 대답을 확인하십시오.
Web Api 호출 중에 사용자 컨텍스트를 얻는 방법은 무엇입니까?
여전히 도움이되기를 바랍니다. 🙂