【问题标题】:Azure Mobile Services - Custom Authentication Claims IssueAzure 移动服务 - 自定义身份验证声明问题
【发布时间】:2015-10-01 07:50:23
【问题描述】:

我已经在我的移动服务中实现了自定义身份验证,但是我添加到我的 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 对象中的声明正在针对该经过身份验证的用户进行保存。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-12
      • 2015-10-06
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多