Ich habe ein MVC-Projekt mit verwendet Identität. Dies ermöglicht Benutzern, sich bei der Site anzumelden und ein Profil zu erstellen.Zugriff Benutzername von der Standardauthentifizierung
Ich habe eine separate WebAPI-Klasse, damit Embedded-GSM-Geräte mit dem Server kommunizieren können. Benutzer können sich anmelden und viele GSM-Einheiten zu ihrem Profil hinzufügen. Ich musste einen grundlegenden Authentifizierungsfilter für die eingebetteten GSM-Geräte verwenden, da sie kein Token/Cookie cachen können.
Meine Frage ist, wie suche ich den Benutzernamen der Anfrage in einem WebAPI-Controller? Ich habe versucht, auf den Benutzer mit RequestContext.Principal wie Vorschläge zuzugreifen, aber es gibt null zurück.
Controller:
[BasicAuthentication]
public void Post([FromBody]string value)
{
// Get username from request for database lookup?
}
Filter:
public class BasicAuthenticationAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (actionContext.Request.Headers.Authorization == null)
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
}
else
{
string authenticationToken = actionContext.Request.Headers.Authorization.Parameter;
string decodedAuthenticationToken = Encoding.UTF8.GetString(Convert.FromBase64String(authenticationToken));
string[] usernamePasswordArray = decodedAuthenticationToken.Split(':');
string username = usernamePasswordArray[0];
string password = usernamePasswordArray[1];
if (GSMSecurity.Login(username, password))
{
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(username), null);
}
else
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
}
}
}
}
Edit:
ich den Benutzernamen unter Verwendung gefunden:
System.Threading.Thread.CurrentPrincipal;
RequestContext.Principal.Identity.Name –