繁体   English   中英

Asp.net Web表单,Asp身份-如何存储来自Facebook,Twitter等的声明

[英]Asp.net web forms, Asp Identity - how to store claims from Facebook, Twitter, etc

该请求基于新的Visual Studio 2013 Asp.net Identity集成。 我已经看到了一些有关MVC的有关此问题的帖子,但是我一生无法将其用于标准Web窗体。 我想做的是根据我从Facebook(或其他服务)获得的声明填充AspNetUserClaims表。 我实际上可以在下面的OnAuthenticated中看到这些值,但是我一生都无法找出如何将这些声明添加到当前登录用户的上下文中?

实际上有数百个MVC示例围绕此,但是没有Web窗体示例。 这应该很简单,但是由于某些原因,我无法将当前登录用户的上下文与来自Facebook的声明和凭据相匹配。

目前,在OnAuthenticated触发之后,显然,它使我返回到内置示例提供的页面(RegisterExternalLogin.aspx)。 但是,声明不见了,登录Facebook的上下文也消失了,在这一点上我无能为力。

因此,最终的问题是,如何根据当前登录用户的上下文(不使用MVC)将来自Facebook的索赔填充到AspNetUserClaims表中?

        var fboptions = new FacebookAuthenticationOptions();
        fboptions.AppId = "xxxxxxxxxxxxxxxxxxx";
        fboptions.AppSecret = "yyyyyyyyyyyyyyyyyyyyyy";
        fboptions.Scope.Add("email");
        fboptions.Scope.Add("friends_about_me");
        fboptions.Scope.Add("friends_photos");

        fboptions.Provider = new FacebookAuthenticationProvider()
        {
            OnAuthenticated = (context) =>
            {
                foreach (var v in context.User)
                {
                    context.Identity.AddClaim(new System.Security.Claims.Claim(v.Key, v.Value.ToString()));
                }
                context.Identity.AddClaim(new System.Security.Claims.Claim("FacebookAccessToken", context.AccessToken));
                return Task.FromResult(0);
            },
        };
        app.UseFacebookAuthentication(fboptions);

好的,我知道您说过您想知道如何在没有MVC的情况下进行操作,虽然我无法直接回答,但是我可以告诉您我在MVC中也有类似的问题,以及如何解决它。 希望这可以为您指明Web窗体中的正确方向。

关键位如下:

使用外部提供程序登录后,将转到一个页面,您可以在其中注册新用户。 从那回发之后,我必须首先添加一行,然后再次获得ClaimsIdentity:

ClaimsIdentity claimsIdentity =
            await AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);

如果没有上面这条线的电话,它根本对我不起作用,所以也许这就是您的问题所在。

一旦有了ClaimsIdentity,您就可以遍历对Identity的Claims属性的索赔集合。 这应该包括您在OnAuthenticated回调委托中添加的Facebook令牌。 然后,您要做的就是调用UserManager.AddClaimAsync()将其添加到Claims数据库表中。

有关更多信息,请查看我的AccountController类, 网址https://github.com/beabigrockstar/AspNetIdentitySocialProfileImage/blob/master/Controllers/AccountController.cs

专门查看方法ExternalLoginConfirmation(ExternalLoginConfirmationViewModel模型,字符串returnUrl)和对StoreAuthTokenClaims()的调用,然后当然要看我在StoreAuthTokenClaims()中遵循的过程

希望这可以对WebForms有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM