클래스 사이의 토큰을 공유 할 수어떻게 asp.net 웹-API를 설계 문제가 발생하고이 문제를 해결하는 방법을 알고 싶습니다
public abstract class BaseApiController<TEntity> : ApiController where TEntity : Entity
{
protected string GetUsername()
{
return Utilities.GetUsername(Request.Headers.Authorization);
}
//some other code
}
public class StakeholderApiController : BaseApiController<Stakeholders>
{
ILogger _logger = new CustomApiLogger("StkhManager", GetUsername())
//some other code
}
지금 내가 가지고있는 문제는 다음과 같습니다
모든 ApiControllers간에 특정 기능을 공유하는 BaseApiController가 있습니다.
그리고 나서 공유 기능이없는 특정 ApiController가 있습니다.
이제 로깅을하는 동안 로그인 한 사용자 이름을 기록하고 싶습니다. 문제는 새 인스턴스를 만들 때마다 전달해야합니다. 로그인 한 사용자의 이름을 전역으로 만들 수있는 방법이 있습니까? 현재 api 요청을 통해 모든 곳에서 액세스 할 수 있습니다.
정적으로 만들 수는 없습니다. 그렇지 않으면 다른 사용자가 잘못된 사용자 이름을 요청할 수 있습니다.
내가 매번 전달하는 것을 피할 수있는 방법이 있습니다. webapi가 무국적이므로 세션을 사용할 수 없으므로 다른 방법이 있습니까 ??
나는 그래서 내가 MVC에서 제공하는 인증 기술을 사용하고 있지 않다, AngularJS와 프론트 엔드를 사용하고/.NET
참고 :
내가 어떤 이유로 기본 클래스에 로거의 생성을 이동할 수 없습니다
이것은 하나의 예이며 다른 많은 곳에서 로그인 한 사용자의 이름을 사용하고 싶습니다. 그러므로 주위를 지나치고 싶지 않습니다.
'Thread.CurrentPrincipal.Identity.Name'을 사용해 보셨나요? – haim770
나는 클라이언트 측에서 angularjs를 사용하고 있으므로 현재로서는 CurrentPrincipal과 관련된 아무 것도 설정하지 않습니다. 하지만 당신이 어떻게 내가 그것을 설정할 수있는 코드를 공유 할 수 있다면 그것은 좋을 것입니다 ... – harishr