0

와 사용자 프로파일을 구현하는 아웃 - 오브 - 박스 웹 API의 비주얼 스튜디오 템플릿을 제공 개별 사용자 계정과 인증. 나는 Angular.js 프런트 엔드에서 API를 소비합니다.은 어떻게 사용하고 토큰 인증

선단부에 사용자 프로파일을 제공하는 '표준'의 방법은 무엇인가?

사용자 프로필 (전자 메일, 성과 이름, 역할)을 별도의 활동으로 가져 오거나/Token이 토큰과 적어도 역할과 어쩌면 성과 이름을 제공해야 UI에서 표시 할 수 있습니까?

내가 인증을위한 토큰뿐만 아니라 ASP.Net 웹 API 광고 + Angular.js 특정 정보를 사용하여 애플리케이션 아키텍처/흐름에 대한 일반적인 지침을 찾고 있어요.

답변

0

기록의 경우이 방법을 구현 한 것입니다.

TL, 'givenName과가', '성'은 이미이 정보를 저장하기 위해 OK 장소 제안하는 존재하기 때문에 내가 주장을 사용하기로 결정

DR. 나는 주장을 편집하는 것이 매우 어색하다는 것을 알았다.

세부

여기 내 추가/UpdateUser 방법입니다. 클레임 처리 방법이 싫지만 더 나은 방법을 찾을 수 없습니다.

 [HttpPost] 
     [Authorize(Roles = "admin")] 
     public async Task<IHttpActionResult> Post(AccountModelDTO model) 
     { 
      if (!ModelState.IsValid) 
      { 
       return BadRequest(ModelState); 
      } 

      using (var transaction = Request.GetOwinContext().Get<ApplicationDbContext>().Database.BeginTransaction()) 
      { 
       ApplicationUser user; 
       if(string.IsNullOrEmpty(model.Id)) 
       {//Add user 
        user = new ApplicationUser() { UserName = model.Email, Email = model.Email }; 

        IdentityResult resultAdd = await UserManager.CreateAsync(user); //Note, that CreateAsync this sets user.Id 
        if (!resultAdd.Succeeded) 
        { 
         return GetErrorResult(resultAdd); 
        } 
       } else 
       {//Update user 
        user = await UserManager.FindByIdAsync(model.Id); 
        if(user == null) 
        { 
         throw new HttpResponseException(Request.CreateResponse(System.Net.HttpStatusCode.BadRequest, "Unknown id")); 
        } 

        user.UserName = model.Email; 
        user.Email = model.Email; 

        //Remove existing claims 
        var claims = user.Claims.Where(c=>c.ClaimType == ClaimTypes.GivenName).ToList(); 
        foreach(var claim in claims) 
        { 
         await UserManager.RemoveClaimAsync(user.Id, new Claim(ClaimTypes.GivenName, claim.ClaimValue)); 
        } 

        claims = user.Claims.Where(c => c.ClaimType == ClaimTypes.Surname).ToList(); 
        foreach (var claim in claims) 
        { 
         await UserManager.RemoveClaimAsync(user.Id, new Claim(ClaimTypes.Surname, claim.ClaimValue)); 
        } 

        claims = user.Claims.Where(c => c.ClaimType == ClaimTypes.Role).ToList(); 
        foreach (var claim in claims) 
        { 
         await UserManager.RemoveClaimAsync(user.Id, new Claim(ClaimTypes.Role, claim.ClaimValue)); 
        } 
       } 

       var result = await UserManager.AddClaimAsync(user.Id, new Claim(ClaimTypes.GivenName, model.FirstName)); 
       if (!result.Succeeded) 
       { 
        return GetErrorResult(result); 
       } 

       await UserManager.AddClaimAsync(user.Id, new Claim(ClaimTypes.Surname, model.LastName)); 
       if (!result.Succeeded) 
       { 
        return GetErrorResult(result); 
       } 

       foreach (var role in model.Roles) 
       { 
        result = await UserManager.AddClaimAsync(user.Id, new Claim(ClaimTypes.Role, role)); 
       } 
       if (!result.Succeeded) 
       { 
        return GetErrorResult(result); 
       } 

       transaction.Commit(); 
       return Ok(); 
      } 
     }