Я новичок в .net, и я пытаюсь создать сервис restfull, в котором вы можете пройти аутентификацию через OAuth2 для такой службы, как facebook, а также иметь возможность войти в систему с «обычной учетной записью». Шаблон SPA от VS2013 позволил мне сделать это быстро и легко и я им очень доволен.
Сейчас я сталкиваюсь с другой проблемой. Кажется, я не могу найти способ разделить доступ для этих разных типов входа в систему. Например, я хочу разрешить только пользователям, использующим метод аутентификации oauth, доступ к X, а пользователям, прошедшим аутентификацию «обычным способом» (также с токеном носителя), — возможность видеть только Y.
Я искал в Интернете, и кажется, что я должен использовать тег [Authorize], но я не уверен, как его настроить и как различать разные логины. Я нашел различные методы настройки тега, но ни один из них не работает, и я постоянно натыкаюсь на устаревшие решения.
Кто-нибудь может помочь?
Благодарю вас!
Мое окончательное решение (спасибо 0leg)
Создал тег авторизации для каждого типа аутентификации:
public class AuthorizeExternalsOnly : AuthorizeAttribute
{
protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)
{
if (System.Web.HttpContext.Current.User.Identity.IsAuthenticated)
{
string externalClaim = "";
try
{
externalClaim = (actionContext.ControllerContext.RequestContext.Principal.Identity as ClaimsIdentity).Claims.FirstOrDefault(x => x.Type == ClaimTypes.Authentication).Value;
}
catch (NullReferenceException)
{
Debug.WriteLine("no external claim found");
}
if (externalClaim != "")
{
return base.IsAuthorized(actionContext);
}
return false;
}
return false;
}
}
Затем в контроллере учетной записи я добавил утверждение в GetExternalLogin.
oAuthIdentity.AddClaim(new Claim(ClaimTypes.Authentication, "External"));
(...)
identity.AddClaim(new Claim(ClaimTypes.Authentication, "External"));
непосредственно перед каждым входом в систему.
[CustomAuthorizeAttribute("External")]
- person 0leg   schedule 22.04.2014