我正在尝试在MVC 5.1应用程序中实现身份验证和授权。身份验证通过自定义实施的Facebook进行。 (如果需要,我可以发布该代码。)一旦FB验证并发回代码,调用auth服务的Authenticate
方法就可以将用户签入应用程序。应用程序本身没有授权代码(因此不使用身份或其他成员资格服务)。
public async Task<ActionResult> Connect(string code)
{
if (code == null)
{
return RedirectToAction("Index", "Home");
}
else
{
// get access token
var accessToken = await nApplication.FacebookClient.AccessTokenAsync(code);
// get user info from facebook
var meResult = await nApplication.FacebookClient.MeResultAsync(accessToken);
nApplication.NRepository.SaveChanges();
nAuthorization.Authenticate(member);
return RedirectToAction("Index");
}
}
nAuthorization.Authenticate(member);
创建声明列表并执行OWIN SignIn
,
claims.Add(new Claim(ClaimTypes.Name, member.Name));
claims.Add(new Claim(ClaimTypes.Role, "Member"));
var claimIdentity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
owinContext.Authentication.SignIn(new AuthenticationProperties { IsPersistent = true }, claimIdentity);
我正在使用Authorize
命名空间中的Mvc
属性。但此时/Profile/Authenticate/
这是我的Owin LoginPath
一次又一次地被调用以将用户重定向到FB并返回上面的Connect
方法。
[Authorize(Roles = "Member")]
public async Task<ActionResult> Index(int? id)
我检查了控制器中的User
属性,但未经过身份验证。我可以将其设置为新的ClaimsPrincipal
,但我希望验证码独立于HttpContext
。它似乎不是正确的解决方案。
我的Startup
课程包含:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
LoginPath = new PathString("/Profile/Authenticate/"),
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
CookieSecure = CookieSecureOption.Always,
ReturnUrlParameter = "next"
});
也许我错过了一些完全基本的东西?任何指针都会有所帮助,我查看了以下文章,但无济于事:
答案 0 :(得分:1)
我认为这将解决您的问题...它对我有用:
在global.asax.cs文件中添加一个空方法:
protected void Session_Start()
{
}
出于某种原因,如果没有这个,asp.net会话cookie不会在适当的时间设置。 Thinktecture开发人员认为,如果您的webapp使用http并且您的身份提供商使用https但我尚未验证,那么可能会发生这种情况。