Azure移动服务 - 自定义身份验证声明问题

时间:2015-07-13 06:32:44

标签: azure azure-mobile-services claims-based-identity

我在我的移动服务中实现了自定义身份验证,但我添加到ClaimsIdentity对象的声明似乎没有保存。

我创建了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");

如果我使用返回的授权令牌调用另一个方法并尝试检索GivenName或Surname声明,则它们不可用。

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

这是预期的行为还是我做错了什么?我假设正在发送给CreateLoginResult的ClaimsIdentity对象中的声明正在针对该经过身份验证的用户进行保存。

1 个答案:

答案 0 :(得分:1)

传递给此方法的ClaimsIdentity不会被完全使用,除非您在CreateCredentials()的重载中对其执行操作。首先,您应该使用所需的字段创建ProviderCredentials的子类。 CreateCredentials()将由CreateLoginResult()调用,它将获得与参数相同的ClaimsIdentity。

返回的ProviderCredentials已存储,您可以随时通过调用ServiceUser.GetIdentitiesAsync()在服务器代码中再次检索它。