2015-07-01 62 views
3

我的客戶端應用程序成功驗證IdentityServer3後,無法獲取WebAPI控制器上的用戶信息。下面是步驟:如何在使用IdentityServer進行身份驗證後在WebAPI控制器上獲取用戶信息?

  1. JavaScript Implicit Client應用
  2. 我看到用戶對「ID令牌內容」面板數據「登錄使用配置文件和訪問令牌」成功 enter image description here
  3. 我做「呼叫服務」我的WebAPI服務,我在ClaimsPrincipal中看到很多聲明,但無法獲取諸如電子郵件,角色顯示在客戶端的值。以下是代碼&的回覆。

enter image description here 任何人都可以提供給我一些幫助如何獲取WebAPI上的用戶數據嗎?

+0

你有沒有想過這個?我正在努力解決同樣的問題。 – stoneMaster

回答

5

如果你使用owin,你可以試試這個代碼。

var owinUser = TryGetOwinUser(); 
var claim= TryGetClaim(owinUser, "email"); 
string email = claim.Value; 

private ClaimsPrincipal TryGetOwinUser() 
    { 
     if (HttpContext.Current == null) 
      return null; 

     var context = HttpContext.Current.GetOwinContext(); 
     if (context == null) 
      return null; 

     if (context.Authentication == null || context.Authentication.User == null) 
      return null; 

     return context.Authentication.User; 
    } 

    private Claim TryGetClaim(ClaimsPrincipal owinUser, string key) 
    { 
     if (owinUser == null) 
      return null; 

     if (owinUser.Claims == null) 
      return null; 

     return owinUser.Claims.FirstOrDefault(o => o.Type.Equals(key)); 
    } 
+0

感謝您的回答,@Serdar。我可以像你的代碼一樣獲得owincontext,但聲明是一樣的。如您所說,有Type = scope和Value = email的聲明,沒有一個Type = email。你有其他想法嗎? – hazjack

+0

理賠不會通過電子郵件發送信息。您可以在登錄時向聲明添加聲明(「電子郵件」) –

+0

登錄由IdentityServer完成,我不知道我的WebAPI服務中的電子郵件地址是什麼。您可以在示例客戶端應用程序中看到,它可以從令牌解析所有信息,包括電子郵件地址和角色http://i.stack.imgur.com/mwSCi.png – hazjack

相關問題