IdentityServer Facebook Auth更改主题ID /不是Facebook ID

时间:2016-10-06 11:42:43

标签: c# oauth openid identityserver3 facebook-authentication

我启用了IdentityServer,使用隐式流程对Facebook进行身份验证。

现在当我通过身份验证时,我会获得一个id值作为主题。像502967fe0125ce3ff75050ef7b83fd68我用它作为用户ID来存储用户相关的数据。但有时候,主题的内容似乎会发生变化,我会得到不同的身份。

我是否错过理解主题的概念。是否预计它正在变质?

不应该是主题id常数? 我应该使用哪些信息来存储用户相关数据?

这是我在身份服务器中配置facebook提供程序的方式:

 public static void Configure(IAppBuilder app, string signInAsType)
        {
            var fb = new FacebookAuthenticationOptions
            {
                AuthenticationType = "Facebook",
                Caption = "Facebook",
                SignInAsAuthenticationType = signInAsType,
                AppId = myAppId,
                AppSecret = mySecret 
            };
            app.UseFacebookAuthentication(fb);
        }

这是网站中的客户端配置

   JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>();

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "cookies"
        });

        app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
        {
            AuthenticationType = "oidc",
            SignInAsAuthenticationType = "cookies",

            ClientId = "website",
            Authority = identServer,
            RedirectUri = "http://localhost/pluto/",
            ResponseType = "id_token token",
            Scope = "openid profile email warehouseapi"
        }

2 个答案:

答案 0 :(得分:1)

子声明表示STS上下文中用户的唯一标识符。

这通常意味着在用户首次登录时创建一个新子。然后该子与外部登录(发行者名称和外部子)相关联并重新使用。

答案 1 :(得分:0)

找到原因。返回的sub中的id是身份服务器的用户ID,而不是facebook id。当我使用内存实现时,每次重新启动身份服务器时,id都会更改。

所以对我而言,这是关闭的,但仍有一个问题,这是一个可取的行为。

是否更有可能将facebook id放入主题?