【发布时间】:2015-02-02 03:20:18
【问题描述】:
我必须找到解决问题的方法。所以我正在开发网站,我被身份验证困住了。首先,我们使用 Azure Active Directory 进行用户存储。所以我找到了WebApp-WebAPI-OpenIDConnect-DotNet,并让它满足我的需求。到目前为止它工作正常。但是现在我还必须实现外部登录(facebook、twitter 等)所以我在处理这个任务时注释掉了所有以前的工作。我不得不重写一些 UserManager 和 UserStore 类,但让它工作。我可以用脸书登录。但是现在,当我需要将这两个登录名连接在一起时,它们不起作用。看来,他们正在框架内制造冲突。 Facebook 登录需要app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);,但在我打开它的那一刻,天蓝色登录停止工作。如果我对此发表评论,则天蓝色登录有效,而 Facebook 则无效。谁能帮我解决这个问题?我会提供我的Startup.Auth.cs
using System;
using Owin;
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.Cookies;
using Microsoft.Owin.Security.OpenIdConnect;
using System.Configuration;
using System.Globalization;
using Microsoft.AspNet.Identity;
using Microsoft.Owin;
using Microsoft.AspNet.Identity.Owin;
using ClearRoadmapWeb.LoginProviderHelpers;
using Microsoft.Owin.Security.Facebook;
using System.Collections.Generic;
namespace ClearRoadmapWeb
{
public partial class Startup
{
private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"];
private static string postLogoutRedirectUri = ConfigurationManager.AppSettings["ida:PostLogoutRedirectUri"];
string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(DefaultAuthenticationTypes.ExternalCookie);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri
}
);
app.CreatePerOwinContext<AzureIdentityUserManager>(AzureIdentityUserManager.Create); //For Faceook
app.CreatePerOwinContext<AzureIdentitySignInManager>(AzureIdentitySignInManager.Create); //For Facebook
#region FacebookOptions
//app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
FacebookAuthenticationOptions facebookOptions = new FacebookAuthenticationOptions()
{
AppId = "fb appId",
AppSecret = "fb appSecret"
};
facebookOptions.Scope.Add("email");
facebookOptions.Provider = new FacebookAuthenticationProvider()
{
OnAuthenticated = async context =>
{
foreach (var x in context.User)
{
context.Identity.AddClaim(new System.Security.Claims.Claim(x.Key, x.Value.ToString()));
}
//Get the access token from FB and store it in the database and use FacebookC# SDK to get more information about the user
context.Identity.AddClaim(new System.Security.Claims.Claim("FacebookAccessToken", context.AccessToken));
}
};
#endregion
app.UseFacebookAuthentication(facebookOptions);
}
}
}
【问题讨论】:
标签: asp.net-mvc facebook azure asp.net-web-api owin