2015-07-13 140 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()再次在您的服务器代码中检索它。