Azure 移动服务 - 自定义身份验证声明问题
Azure Mobile Services - Custom Authentication Claims Issue
我在我的移动服务中实施了自定义身份验证,但我添加到我的 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 对象中的声明是针对该经过身份验证的用户保存的。
传递给此方法的 ClaimsIdentity 不会被完全使用,除非您在 CreateCredentials()
的重载中对其进行操作。首先,您应该使用所需字段创建 ProviderCredentials 的子 class。 CreateCredentials() 将由 CreateLoginResult()
调用,它将获得与参数相同的 ClaimsIdentity。
返回的 ProviderCredentials 已存储,您始终可以通过调用 ServiceUser.GetIdentitiesAsync()
.
在您的服务器代码中再次检索它
我在我的移动服务中实施了自定义身份验证,但我添加到我的 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 对象中的声明是针对该经过身份验证的用户保存的。
传递给此方法的 ClaimsIdentity 不会被完全使用,除非您在 CreateCredentials()
的重载中对其进行操作。首先,您应该使用所需字段创建 ProviderCredentials 的子 class。 CreateCredentials() 将由 CreateLoginResult()
调用,它将获得与参数相同的 ClaimsIdentity。
返回的 ProviderCredentials 已存储,您始终可以通过调用 ServiceUser.GetIdentitiesAsync()
.