Tutto ciò che ho letto dice di passare parametri a un servizio REST nell'URI, sia per modello, sia per stringa di query:
https://www.myapp/my/login/api/authenticate/ganders/mypassword
o
https://www.myapp/my/login/api/authenticate?user=ganders&password=mypassword
Ma ovviamente quelli stanno esponendo il mio nome utente e password in chiaro.
Il nostro addetto alla sicurezza sta dicendo che dobbiamo passare i parametri nel corpo della richiesta. Come lo faccio? Gli esempi, o solo un link ad un esempio, sono sufficienti perché apparentemente le mie competenze su google non sono molto alte.
Una cosa che ho trovato finora è che se decori i tuoi metodi di servizio con l'attributo [FromBody], come questo:
public AuthenticationResult Authenticate(**[FromBody]**LoginData loginData)
{
return AuthenticationResult.Authenticated;
}
che li afferrerà dal corpo. Il mio altro compito è provare a testarlo? È un compito per Fiddler? Oppure gli strumenti Dev Chrome?
Un'altra cosa che ho trovato finora è che puoi avere solo 1 parametro nel post, è esatto?
Ci dispiace, molte domande qui. Ho passato tutto il giorno ieri cercando di fare ricerche su questo e ovviamente non sono andato molto lontano ...
Modifica:
Quindi ecco quello che ho finora, questa è la versione "GET" che abbiamo bisogno di convertire in un POST (questa è l'API C # REST chiamata angolare)
$http.defaults.headers.common.Authorization = 'Basic ' + encoded;
var url = $rootScope.serviceBaseUrl + "login/get" + "?username=" + user + "&password=" + password + "&accesstoken=";
$http({method: 'Get', url: url}).success(.....).error(......);
E il servizio REST:
[HttpGet]
public AuthenticationResult Get([FromUri]LoginModel login)
{
try
{
AuthenticationService authService = new AuthenticationService();
AuthenticationResult result = authService.IsAuthenticated(login);
if (result.IsAuthenticated)
return result;
else
{
return new AuthenticationResult()
{
IsAuthenticated = false,
User = new User()
{
UserId = login.Username
}
};
}
}
catch(Exception ex)
{
return new AuthenticationResult()
{
IsAuthenticated = false,
User = new User()
{
UserId = login.Username,
Token = ex.Message
}
};
}
}
Modifica2: mi sto avvicinando. Ho la risposta da trasmettere (tramite Fiddler), ma il mio array JSON di dati che sto passando non viene mappato sul mio tipo complesso. Ecco cosa ho: In Fiddler:
User-Agent: Fiddler
Host: localhost:42761
Content-Length: 73
Content-Type: application/json
Accept: application/json
"Corpo richiesta":
{
"Username": "ganders",
"Password": "hashedPassword"
}
Il mio oggetto "LoginData" è istanziato sul lato del servizio, ma le mie due proprietà sono nulle ...