2016-11-02 6 views
1

내 로컬에서 토큰을 가져 오기 위해 API를 호출 할 수 있지만 ASP.NET MVC 프런트 엔드 응용 프로그램에서이 토큰을 사용하여 클레임을 얻는 방법 . 나는 (아래에서 언급 한) 이와 비슷한 것을 시도했지만 토큰의 암호를 해독하고 클레임을 얻을 수없는 방법을 시도했다. 나는 기계 키가 같은지 확인했다.MVC 프런트 엔드 응용 프로그램에서 무기명 토큰에서 클레임을 가져올 수 없습니다.

var unencryptedToken = Startup.OAuthBearerOptions.AccessTokenFormat.Unprotect(accessToken); 
//(This line is always returning the null) 
var identity = unencryptedToken.Identity; 
var id = new ClaimsIdentity(identity.Claims, DefaultAuthenticationTypes.ApplicationCookie); 

당신이 나를 도와 줄 수 있습니까 ??

토큰을 생성하려면 내 webapi를 빌드하려면 아래 기사를 사용했습니다. http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/

감사합니다, Rupesh

답변

0

오래된 질문 비록,하지만 난이 오늘 구현했다.

public static class RequestExtensions 
{ 
    public static string GetRoles(this HttpRequestContext context) 
    { 
     var idt = context.Principal.Identity as ClaimsIdentity; 
     if (idt == null) 
      return string.Empty; 
     var roles = idt.Claims.Where(x => x.Type == "role") 
           .Select(x => x.Value).FirstOrDefault(); 
     return roles; 
    } 

    public static string GetUserName(this HttpRequestContext context) 
    { 
     var idt = context.Principal.Identity as ClaimsIdentity; 
     if (idt == null) 
      return string.Empty; 
     var userName = idt.Claims.Where(x => x.Type == "UserName") 
           .Select(x => x.Value).FirstOrDefault(); 
     return userName; 
    } 
} 
: 쉽게 역할의 쉼표로 구분 된 문자열을 반환 할 수 있도록 내가 extension method을 추가 한

var userName = idt.Claims.Where(x => x.Type == "UserName").Select(x => x.Value).First(); 
var roles = idt.Claims.Where(x => x.Type == "role").Select(x => x.Value).FirstOrDefault(); 

return new[] {$"'userNameClaim':'{userName}','rolesClaim':'{roles}'"}; 

:이 같은 RequestContext'sUser 객체에서 정보를 얻는 시도 할 수 있습니다