是' sub'声明openid范围或配置文件范围的一部分?

时间:2016-07-21 17:22:23

标签: openid-connect identityserver3

根据OpenID Connect specification sub声明openid范围或profile范围的一部分?我找不到那些信息

UPDATE1
我使用IdentityServer3进行身份验证。客户端正在向服务器发出请求,如下所示。作为回应,我不会根据Open ID Connect规范获得sub声明。但是,响应包含http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier,其值与sub相同nameidentifiersub相同。

这是客户请求

    public void Configuration(IAppBuilder app)
    {
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "Cookies"
        });

        app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
        {
            Authority = "https://localhost:44314/identity",
            Scope = "openid",
            ClientId = "LocalHostMvcClient",
            RedirectUri = "http://localhost:34937/",
            ResponseType = "id_token",
            SignInAsAuthenticationType = "Cookies",
        }
   }

id_token回复

enter image description here

更新2
基于以下评论,我更新了客户端的启动文件

    private void TurnOffMicrosoftJWTMapping()
    {
        //The long claim names come from Microsoft’s JWT handler trying to map some claim types to .NET’s ClaimTypes class types. 
        //We can turn off this behavior with the following line of code (in Startup).
        //This also means that we need to adjust the configuration for anti-CSRF protection to the new unique sub claim type:
        AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Subject;
        JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>();
    }

然后在客户端的启动中调用此方法

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        TurnOffMicrosoftJWTMapping();

        //configure OpenIDConnect request here
    }
}

2 个答案:

答案 0 :(得分:10)

sub是id_token的必需声明 - 而openid范围是发出OpenID Connect身份验证请求所需的最小范围。你可以将openid与其他范围混合 - 但必须存在openid。

这是他们的关系。

IdentityServer根据以下内容发出标准声明类型(例如sub)

https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims

Microsoft JWT处理程序将这些标准声明转换为Microsoft专有声明。你可以通过以下方式解决这个恼人的行为:

JwtSecurityTokenHandler.InboundClaimTypeMap.Clear()

答案 1 :(得分:2)

两者都没有,只要required claim of the ID Token,只要发出一个{{3}}。