Sto tentando di implementare l'autorizzazione JWT in un progetto. Tuttavia, per ottenere correttamente il token devo passare client_id dal frontend di AngularJS al backend API Web di ASP.NET e per quanto ne so non è affatto sicuro. Quindi qualcuno potrebbe darmi un suggerimento su cosa dovrei fare nella mia situazione.Cosa fare con JWT client_id su backend JavaScript con API Web ASP.NET
Sul lato JS -
var data = 'grant_type=password&username='
+ loginData.Email + '&password=' + loginData.Password + '&client_id=' + client_id;
$http.post('/oauth2/token', data); //Code omitted
sto usando questo guide per la creazione di un'autorizzazione Jwt, per la maggior parte. Tranne Ho un app su un dominio, ecco quello che il mio Startup.cs assomiglia -
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
ConfigureOAuth(app);
ConfigureValidationOAuth(app);
}
private static void ConfigureOAuth(IAppBuilder app)
{
var oAuthServerOptions = new OAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/oauth2/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30),
Provider = new CustomOAuthProvider(),
AccessTokenFormat = new CustomJwtFormat(ConfigurationManager.AppSettings["owin:issuer"])
};
app.UseOAuthAuthorizationServer(oAuthServerOptions);
}
private static void ConfigureValidationOAuth(IAppBuilder app)
{
var issuer = ConfigurationManager.AppSettings["owin:issuer"];
var audience = ConfigurationManager.AppSettings["owin:audience"];
var secret = TextEncodings.Base64Url.Decode(ConfigurationManager.AppSettings["owin:secret"]);
//Api controllers with [Authorize] attribute will be validated with Jwt
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = new[] {audience},
IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
{
new SymmetricKeyIssuerSecurityTokenProvider(issuer, secret)
}
});
}
Penso che "client_id" si riferisce all'ID del ** client software ** che richiede il token e non la persona. Immagino che tu debba impostare un elenco di client software autorizzati all'autenticazione/autorizzazione con il tuo server. ** BTW ** Suggerirei di usare [ThinkTecture IdentityServer] (https://github.com/IdentityServer/IdentityServer3) per implementare il tuo server, non reinventare la ruota, specialmente quando si tratta di autenticazione/autorizzazione. –
Grazie per la risposta. Quindi, posso semplicemente salvarlo solo dal lato server, giusto? E grazie per il link. – renchan
Il client_id viene utilizzato principalmente per evitare che i client non autorizzati utilizzino il proprio server di autenticazione o inseriscano richieste specifiche per clienti specifici. Ad esempio, gli utenti che eseguono l'autenticazione da client1 potrebbero ottenere attestazioni diverse dagli utenti che si autenticano utilizzando client2 –