사용자를 전달하지 않고 ApiController 작업 내에서 현재 사용자를 가져옵니다.매개 변수로서의 ID
userName 또는 userId를 매개 변수로 전달하지 않고 보안 APIController 작업 내에서 현재 사용자를 가져오려면 어떻게 해야 합니까?
안전한 조치를 취할 수 있기 때문에 이를 사용할 수 있다고 가정합니다.보안 작업이 수행되면 사용자가 이미 인증되었으며 요청에 베어러 토큰이 있음을 의미합니다.WebApi가 사용자에게 권한을 부여했기 때문에 userId를 작업 매개 변수로 전달할 필요 없이 userId에 액세스할 수 있는 기본 제공 방식이 있을 수 있습니다.
WebApi 2에서 사용할 수 있습니다.RequestContext.Principal
API 컨트롤러의 메서드 내에서
의 속성을 사용하여 주체에 액세스할 수도 있습니다.
따라서 다음 두 문장은 기본적으로 동일합니다.
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
}
}
그리고 WebApi2에서 UserManager를 사용하려면 로마자(AccountController로 읽음)처럼 해야 합니다.
public ApplicationUserManager UserManager
{
get { return HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>(); }
}
IIS 및 자체 호스트 모드에서 호환되어야 합니다.
위의 어떤 제안도 저에게 효과가 없었습니다.다음 사람들이 했습니다!
HttpContext.Current.Request.LogonUserIdentity.Name
다양한 시나리오가 있는 것 같고, 이것이 저에게 효과가 있었습니다.내 시나리오는 Angular와 관련되어 있습니다.IIS에서 실행되는 JS 프런트엔드 및 Web API 2 백엔드 응용 프로그램입니다.Windows 인증에서 두 응용 프로그램을 모두 단독으로 실행하도록 설정해야 했습니다.
사용자 정보를 전달할 필요가 없습니다.브라우저와 IIS는 로그온된 사용자 자격 증명을 교환하고 웹 API는 IIS에서 요청 시 사용자 자격 증명에 액세스할 수 있습니다.
Karan Bhandari의 대답은 좋지만, 프로젝트에 추가된 계정 컨트롤러는 매우 가능성이 높습니다.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는 다음 값을 자동으로 설정합니다.
컨텍스트 요청.주요한.신원.GetUserId()
IdentityDbContext를 생성할 때 사용하는 IdentityUser를 기반으로 합니다.
만약 당신이 사용자 지정 테이블을 구현하고 토큰 베어러 인증을 획득한다면, 제 답변을 확인해주시기 바랍니다.
웹 API 호출 중 사용자 컨텍스트를 가져오는 방법은 무엇입니까?
그래도 도움이 되길 바랍니다.:)
string userName;
string userId;
if (HttpContext.Current != null && HttpContext.Current.User != null
&& HttpContext.Current.User.Identity.Name != null)
{
userName = HttpContext.Current.User.Identity.Name;
userId = HttpContext.Current.User.Identity.GetUserId();
}
또는 Darrel Miller의 의견에 따라 HttpContext를 먼저 검색할 수 있습니다.
// get httpContext
object httpContext;
actionContext.Request.Properties.TryGetValue("MS_HttpContext", out httpContext);
참고 항목:
웹 API 작업 내에서 HTTP 컨텍스트에 액세스하는 방법
언급URL : https://stackoverflow.com/questions/21616951/get-the-current-user-within-an-apicontroller-action-without-passing-the-userid
'IT' 카테고리의 다른 글
ggplot2에서 산점도 행렬(쌍() 등가) 생성 (0) | 2023.06.12 |
---|---|
데이터 프레임별 판다 그룹에 키별로 액세스하는 방법 (0) | 2023.06.07 |
Android Studio 4.2가 Gradle 표시줄에 서명 보고서를 표시하지 않음 (0) | 2023.06.07 |
ARM 템플릿에서 단일 따옴표를 이스케이프하는 방법 (0) | 2023.06.07 |
루비 배열에서 평균을 만들려면 어떻게 해야 합니까? (0) | 2023.06.07 |