Sto costruendo un'API REST per un sito Web DotNetNuke 6, facendo uso del framework di servizi basato su MVC di DNN. Tuttavia, non ho alcun background in autenticazione, quindi non sono nemmeno sicuro da dove cominciare.Come gestire la sicurezza/autenticazione su un'API Web basata su DNN
Fondamentalmente, vogliamo che i nostri clienti siano in grado di effettuare richieste GET per i dati del loro portale e vogliamo che alcuni client (ma non tutti) siano in grado di pubblicare semplici aggiornamenti POST ai loro dati utente.
Ho cercato di cercare informazioni, ma il problema è che non sono sicuro di cosa sto cercando. DNN ha diversi accessi e ruoli, ma non sono sicuro se o in che modo entrano in gioco. Ho sentito parlare di cose come oAuth ma la mia comprensione di questo è al livello più elementare. Non so se è ciò di cui ho bisogno o no e se o come si applica a DNN. Qualcuno può indicarmi la giusta direzione?
UPDATE: Sulla base della risposta qui sotto su legandola con un modulo e ulteriori ricerche, qui è quello che ho fatto:
ho creato un modulo solo per questo servizio, e ho aggiunto due permessi speciali per questo: "APIGET" e "APIPOST." Li ho assegnati ad alcuni ruoli di prova/account di prova in DNN. Ho scritto un attributo di autorizzazione personalizzato che, dato l'ID del modulo, controlla se l'utente corrente ha i permessi necessari (attraverso i ruoli o direttamente). Per quanto posso dire, l'ID della scheda è irrilevante nel mio caso.
Sembra che funzioni sia con un browser Web (basato sull'account DNN in cui sono connesso) sia con uno script php che invia una richiesta HTTP con un nome utente/password dell'account.
L'attributo autorizzare:
using DotNetNuke.Entities.Modules;
using DotNetNuke.Entities.Portals;
using DotNetNuke.Security;
using DotNetNuke.Security.Permissions;
using System.Web;
public class MyAuthorize : DotNetNuke.Web.Services.AuthorizeAttributeBase
{
public const string AuthModuleFriendlyName = "MyAuthModule";
public const string GETPermission = "APIGET";
public const string POSTPermission = "APIPOST";
public string Permission { get; set; }
protected override bool AuthorizeCore(HttpContextBase context)
{
ModuleController mc = new ModuleController();
ModuleInfo mi = mc.GetModuleByDefinition(PortalController.GetCurrentPortalSettings().PortalId, AuthModuleFriendlyName);
ModulePermissionCollection permCollection = mi.ModulePermissions;
return ModulePermissionController.HasModulePermission(permCollection, Permission);
}
}
Il controller: ("mytest" è il punto finale sia per GET e POST)
public class MyController : DnnController
{
[ActionName("mytest")]
[AcceptVerbs(HttpVerbs.Get)]
[DnnAuthorize(AllowAnonymous = true)]
[MyAuthorize(Permission = MyAuthorize.GETPermission)]
public string myget(string id = "")
{
return "You have my permission to GET";
}
[ActionName("mytest")]
[AcceptVerbs(HttpVerbs.Post)]
[DnnAuthorize(AllowAnonymous = true)]
[MyAuthorize(Permission = MyAuthorize.POSTPermission)]
public string mypost(string id = "")
{
return "You have my permission to POST";
}
}
controllo gentile questo potrebbe essere utile http://stackoverflow.com/questions/12222527/web- api-authentication-best-practice – Gajendra