IdentityServer可以将声明作为身份验证请求的一部分返回

时间:2015-04-01 14:31:45

标签: owin claims-based-identity ws-federation claims thinktecture

我在Thinktecture IdentityServer上使用wsfederation插件实现wsfed身份验证,我使用AuthenticateLocalAsync方法实现了我自己的UserService,如下所示

public async Task<AuthenticateResult> AuthenticateLocalAsync(string username, string password, SignInMessage message)
        {
            var requestViewModel = new SignInRequestViewModel
                              {
                                  EmailAddress = username,
                                  Password = password
                              };

            var result = await signInApplicationService.SignInAsync(requestViewModel);

            var responseViewModel = result.ViewModel;

            var claims = claimBuilder.GetClaims(responseViewModel);

            return new AuthenticateResult(
                responseViewModel.CustomerId.ToString(),
                string.Format("{0} {1}", responseViewModel.FirstName, responseViewModel.LastName),
                claims);
        }

当触发登录事件时,会调用此方法,因为您可以看到我根据自己的数据库存储库对用户进行身份验证,然后从结果中构建了AuthenticateResult对象中引用的声明对象并返回。

所以我认为声明现在应该在客户端上可用,所以不需要进一步请求,但它实际上向自己发出第二个请求GetProfileDataAsync方法被调用,并且基于文档:< / p>

  

只要请求有关用户的声明,就会调用此方法   (例如在令牌创建期间或通过userinfo端点

哪种有意义,但这是否意味着我需要再次调用我的数据库以再次检索客户数据,并重建与我AuthenticateLocalAsync方法中相同的声明?

如果是这样,在第一个身份验证方法中传回声明的重点是什么?

有人可以解释一下吗?

由于

1 个答案:

答案 0 :(得分:0)

对GetProfileDataAsync的调用具有ClaimsPrincipal。您在身份验证阶段提出的声明应该在该委托人身上。所以不需要db往返。

如果在那里找不到索赔,这将是一个错误,您应该在问题跟踪器上打开一个问题。