Possiedo un progetto .NET Mobile Servizi di Azure con alcuni controller che desidero proteggere con l'attributo Authorize tipico. Posso creare una tabella ruoli e una tabella UserProfiles e associare i vari utenti autenticati tramite Google, Facebook, ecc. Con i ruoli nella mia tabella ruoli.Aggiunta di ruoli personalizzati all'utente dei servizi mobili di Azure (Google, Twitter, Facebook, Microsoft)
La mia domanda è: come si aggiunge una richiesta di ruoli ai ServiceUser al termine dell'autenticazione ma prima che venga eseguito il metodo OnAuthorize del filtro Authorize? È possibile?
esempio di quello che voglio fare:
[Authorize(Roles = "admin")]
public async Task<IHttpActionResult> Put(int id, MyDto dto){...}
ruvido esempi tavolo:
Roles
id | name
1 | user
2 | admin
UserProfiles
id | externalLoginId | favoriteColor
1 | Google:<ServiceUser.Id> | blue
UserRoles (Linking Table)
roleId | userId
2 | 1
Edit:
Una possibilità potrebbe essere quella di creare il mio filtro azione sovrascrivendo il filtro Autorizza attributo e nel metodo OnAuthorize è possibile interrogare le tabelle UserProfiles e Roles per ottenere i ruoli per l'utente corrente, quindi verificare i ruoli specificati in Autorizza proprietà Roles dell'oggetto per determinare se l'utente ha accesso. Ma in qualche modo, sembra che ci dovrebbe essere un posto in precedenza nella pipeline che posso intercettare per aggiungere solo le richieste dei ruoli all'utente corrente.
Mi c'è voluto tutto il giorno ieri, ma ho finalmente arrivati alla soluzione sotto. Ho provato di tutto, dal middleware OWIN personalizzato a LoginProviders personalizzati e nessuno mi ha ottenuto quello che volevo. Avrei potuto creare il mio AuthorizationAttribute personalizzato, ma continuavo a pensare che ci sarebbe stato un posto in precedenza nella pipeline in cui avrei potuto aggiungere le dichiarazioni di ruolo e solo essere in grado di usare il solito AuthorizeAttribute [Authorize (Roles = "User, Admin")]. La soluzione qui sotto raggiunge questo obiettivo. Ma ora so molto di più sul funzionamento interno degli assembly Microsoft.WindowsAzure. * Di quanto non avessi mai voluto. :) –