Я создал веб-API MVC4. Но люди без авторизации также могут использовать его. Пример: люди, вводящие в адресную строку «/api/product/1», также могут получить результат. Итак, как реализовать безопасность и разрешить авторизованному лицу использовать только WEB API? Как дать авторизацию человеку, который разрешает вход в веб-API?
Как реализовать авторизацию в веб-API MVC4?
comment
stackoverflow.com/questions/14365373/
- person Marthijn   schedule 06.12.2013
comment
Какой тип авторизации вы ищете? На основе учетных данных? Является ли ваш API общедоступным? Если вы хотите выполнить аутентификацию между серверами, вы можете взглянуть на аутентификацию на основе HMAC, что довольно круто. Этот ответ говорит о реализации WebAPI: stackoverflow.com/a/11782361/350933
- person ctrlplusb   schedule 06.12.2013
Ответы (2)
Дополнительные сведения об аутентификации и авторизации< /а>
Просто добавьте аннотацию к вашему контроллеру:
// Require authorization for all actions on the controller.
[Authorize]
public class ValuesController : ApiController
{
public HttpResponseMessage Get(int id) { ... }
public HttpResponseMessage Post() { ... }
}
// Restrict by user:
[Authorize(Users="Alice,Bob")]
public class ValuesController : ApiController
{
}
// Restrict by role:
[Authorize(Roles="Administrators")]
public class ValuesController : ApiController
{
}
person
Sentinel
schedule
06.12.2013
как аутентифицировать пользователя, чтобы дать ему авторизацию.
- person Calvin Pang; 06.12.2013
Я не уверен, что вы здесь спрашиваете, но я полагаю, вам нужен способ аутентификации пользователя или роли, они есть в ссылке на статью, я обновлю ответ
- person Sentinel; 06.12.2013
вы можете использовать MVC4 AspNet.identiy.Usermanager и Microsoft.Owin.Security для аутентификации пользователя.
private IAuthenticationManager AuthenticationManager
{
get
{
return HttpContext.Current.GetOwinContext().Authentication;
}
}
public HttpResponseMessage Login(string username, string password)
{
UserManager<TenantUser> userManager=new new UserManager<TenantUser>(new UserStore<TenantUser>(YOUR DBCONTEXT));
var user = UserManager.Find(username, password);
if (user != null)
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicatioCookie);
ClaimsIdentity identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = true }, identity);
}
else
new HttpResponseMessage(HttpStatusCode.Forbidden) { Content = new ObjectContent<object>(new { Error = "You are not authorized to perform this action" }, Configuration.Formatters.JsonFormatter) };
}
у меня работает....
person
Nilesh Gajare
schedule
07.12.2013