如何使用OWIN安全中间件在应用程序中设置NameClaimType

vos*_*d01 10 c# owin

我创建了一个使用OpenId Connect进行身份验证的OWIN Web应用程序Microsoft.Owin.Security.OpenIdConnect.

身份验证有效时,我发现创建的ClaimsIdentity.Name成员为null.看来,ClaimsIdentity期望在索赔中提供该名称:

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name

但是,Thinktecture IdentityServer v3提供的名称仅为:

名称

我发现这可以通过NameClaimType旧的ASP.Net应用程序进行配置,但我不知道如何使用OWIN进行此操作.

如何在使用OWIN时配置哪个声明映射到ClaimsIdentity.Name?

vos*_*d01 17

通过代码挖掘我发现可以TokenValidationParameters使用NameClaimType或在NameClaimTypeRetriever(如果声明类型不固定)对象上配置.

TokenValidationParameters配置中间件时,它依赖于选项对象.配置的以下更改适用于所述情况,

app.UseOpenIdConnectAuthentication(
    new OpenIdConnectAuthenticationOptions
        {
        <existing configuration snipped>,
        TokenValidationParameters =
            {
            NameClaimType = Thinktecture.IdentityServer.Core.Constants.ClaimTypes.Name
            }
        } );
Run Code Online (Sandbox Code Playgroud)

Thinktecture.IdentityServer.Core.Constants.ClaimTypes.Namename.可以提供不同的值以指示应该使用不同的声明.