2015-07-13 135 views
0

我在移動服務中實現了自定義身份驗證,但添加到我的ClaimsIdentity對象的聲明似乎並未保存。Azure移動服務 - 自定義身份驗證聲明問題

創建我ClaimsIdentity對象,然後將它傳遞給CreateLoginResult方法,如下所示:

public IServiceTokenHandler Handler { get; set; } 

... 

ClaimsIdentity claimsIdentity = new ClaimsIdentity(); 
claimsIdentity.AddClaim(new Claim(ClaimTypes.NameIdentifier, "username")); 
claimsIdentity.AddClaim(new Claim(ClaimTypes.GivenName, "FirstName")); 
claimsIdentity.AddClaim(new Claim(ClaimTypes.Surname, "LastName")); 

LoginResult login = new CustomLoginProvider(Handler).CreateLoginResult(claimsIdentity, "masterkey"); 

如果我調用與返回的授權令牌的另一種方法,並嘗試獲取給定名稱或姓名索賠,他們不可用。

var identity = (ClaimsIdentity)User.Identity; 
// 'claim' will be null 
Claim claim = identity.FindFirst(ClaimTypes.GivenName); 

這是預期的行爲還是我做錯了什麼?我假定ClaimIdentity對象中的Claim被髮送到CreateLoginResult,並且正在針對該已認證的用戶進行保存。

回答

1

傳遞給此方法的ClaimsIdentity未得到充分使用,除非您在CreateCredentials()的超負荷範圍內對其採取行動。首先,您應該使用所需的字段創建子類的ProviderCredentials。 CreateCredentials()將被CreateLoginResult()調用,並且它將得到與參數相同的ClaimsIdentity。

返回的ProviderCredentials被存儲,並且您可以隨時通過調用ServiceUser.GetIdentitiesAsync()再次在您的服務器代碼中檢索它。