相关疑难解决方法(0)

如何使用ASP.NET身份(OWIN)访问Facebook私人信息?

我正在ASP.NET MVC 5中开发一个网站(目前使用RC1版本).该网站将使用Facebook进行用户身份验证和检索初始个人资料数据.

对于身份验证系统,我使用的是基于OWIN的新ASP.NET身份引擎(http://blogs.msdn.com/b/webdev/archive/2013/07/03/understanding-owin-forms-authentication-in-mvc -5.aspx),因为它极大地简化了与外部提供商进行身份验证的过程.

问题是,一旦用户首次登录,我想从Facebook个人资料中获取其电子邮件地址,但此数据不包含在生成的声明中.所以我考虑过这些替代方案来获取地址:

  1. 指示ASP.NET标识引擎将电子邮件地址包含在从Facebook检索的数据集中,然后转换为声明.我不知道这是否可行.

  2. 使用Facebook图形API(https://developers.facebook.com/docs/getting-started/graphapi)通过使用Facebook用户ID(包含在声明数据中)来检索电子邮件地址.但是,如果用户将其电子邮件地址设置为私有,则此操作无效.

  3. 使用Facebook图形API,但指定"我"而不是Facebook用户ID(https://developers.facebook.com/docs/reference/api/user).但是需要一个访问令牌,我不知道如何(或者根本不可能)检索ASP.NET用来获取用户数据的访问令牌.

所以问题是:

  1. 如何指示ASP.NET标识引擎从Facebook检索其他信息并将其包含在声明数据中?

  2. 或者,我如何检索生成的访问令牌,以便我自己可以询问Facebook?

谢谢!

注意:对于身份验证系统,我的应用程序使用基于此SO答案中链接的示例项目的代码:https://stackoverflow.com/a/18423474/4574

asp.net-mvc facebook-graph-api owin asp.net-mvc-5 asp.net-identity

31
推荐指数
4
解决办法
3万
查看次数

如何知道OWIN cookie什么时候到期?

我想根据OWIN cookie过期的时间创建一些倒数计时器.我正在使用OWIN和MVC 5,我从默认情况下开始了解SlidingExpiration.我不使用'session',因为我需要这个应用程序才能在Web场中生存(我不打算部署会话数据库).

.net session-cookies owin asp.net-mvc-5

20
推荐指数
1
解决办法
2万
查看次数

在asp.net mvc Twitter OAuth2登录后获取oauth凭据

在测试了内置的MVC 5 OAuth2/OpenID提供程序后,我能够创建一个网站,允许我使用我的Twitter凭据进行身份验证.

我现在遇到的问题是,我还想在用户成功通过身份验证后,在网址中存储令牌(oauth_tokenoauth_verifier)Twitter帖子.我需要这些令牌,所以我可以允许用户直接从我的网站发布详细信息到他们的Twitter帐户.

Startup.Auth.cs中设置了TwitterAuthenticationOptions(见下文)后,我确实发现我所关注的令牌可以在上下文中找到,但解析这似乎是一个丑陋的解决方案.(((context.Response.Context).Request).QueryString)

 var tw = new TwitterAuthenticationOptions {
       ConsumerKey = "SecretKey",
       ConsumerSecret = "SecretSecret",
       SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie,
       Provider = new TwitterAuthenticationProvider() {
            OnAuthenticated = (context) => {
                context.Identity.AddClaim(new System.Security.Claims.Claim("urn:twitter:access_token", context.AccessToken, XmlSchemaString, "Twitter"));
                return Task.FromResult(0);
                        }
            }

  };

  app.UseTwitterAuthentication(tw);
Run Code Online (Sandbox Code Playgroud)

如何优雅地实施?对于Facebook我找到了一个实际检索其他信息的解决方案,这感觉类似......

获得-更多信息从 - 社会提供商使用的,在最VS-2013项目模板

c# twitter asp.net-mvc asp.net-mvc-5

7
推荐指数
1
解决办法
2514
查看次数

捕获登录事件,以便我可以缓存其他用户信息

我已经构建了一个Web应用程序.当我建立它时,我勾选了"组织账户"

它运行良好 - 我使用我的Office 365帐户登录并User.Identity.Name包含电子邮件地址

此应用程序是旧的ASP Classic应用程序的替代前端.该应用程序有一个我需要使用的现有安全表.

我想使用电子邮件地址查找此表中的记录以获取

  • 用户的内部数据库密钥(因此我可以在数据库调用中使用它)

  • 用户的安全级别(授权)

我想在验证后立即查看,并将这两个值保存Session到以后再参考

我有一个现有的方法来完成所有这些查找和缓存.我实际上通过从_LoginPartial.cshtml视图中调用它来实现它,但显然从视图中触发这种事情是不正确的

这是查找和缓存用户信息的代码.现在这是在,AccountController.cs但它不一定是

private Boolean GetAdditionalUserInfo()
{
    // if authentication info is saved, don't go find it
    if (Session["UID"] != null) return true;

    // get the db employee id from the database and save it to the session
    var r = (
            from e in db.Employees
            where e.Email == User.Identity.Name
            select new
            {
                e.Emp_ID,
                e.Group_ID
            }
            ).SingleOrDefault();

    if ((r == null) || …
Run Code Online (Sandbox Code Playgroud)

c# asp.net authentication owin asp.net-mvc-5.2

6
推荐指数
1
解决办法
751
查看次数