interactif console oauth2 login

This commit is contained in:
Paul Schneider 2018-08-03 02:59:37 +02:00
commit f5e2f6ffa9
4 changed files with 62 additions and 29 deletions

View file

@ -17,11 +17,11 @@ namespace Yavsc
{
private Client GetApplication(string clientId)
{
Client app = null;
using (var dbContext = new ApplicationDbContext())
{
app = dbContext.Applications.FirstOrDefault(x => x.Id == clientId);
}
if (_dbContext==null)
logger.LogError("no db!");
Client app = _dbContext.Applications.FirstOrDefault(x => x.Id == clientId);
if (app==null)
logger.LogError("no app!");
return app;
}
private readonly ConcurrentDictionary<string, string> _authenticationCodes = new ConcurrentDictionary<string, string>(StringComparer.Ordinal);
@ -43,12 +43,18 @@ namespace Yavsc
if (context.TryGetBasicCredentials(out clientId, out clientSecret) ||
context.TryGetFormCredentials(out clientId, out clientSecret))
{
logger.LogInformation($"ValidateClientAuthentication: Got id&secret: ({clientId} {clientSecret})");
logger.LogInformation($"ValidateClientAuthentication: Got id: ({clientId} secret: {clientSecret})");
var client = GetApplication(clientId);
if (client==null) {
context.SetError("invalid_clientId", "Client secret is invalid.");
return Task.FromResult<object>(null);
} else
if (client.Type == ApplicationTypes.NativeConfidential)
{
logger.LogInformation($"NativeConfidential key");
if (string.IsNullOrWhiteSpace(clientSecret))
{
logger.LogInformation($"invalid_clientId: Client secret should be sent.");
context.SetError("invalid_clientId", "Client secret should be sent.");
return Task.FromResult<object>(null);
}
@ -59,6 +65,7 @@ namespace Yavsc
if (client.Secret != clientSecret)
{
context.SetError("invalid_clientId", "Client secret is invalid.");
logger.LogInformation($"invalid_clientId: Client secret is invalid.");
return Task.FromResult<object>(null);
}
}
@ -67,6 +74,7 @@ namespace Yavsc
if (!client.Active)
{
context.SetError("invalid_clientId", "Client is inactive.");
logger.LogInformation($"invalid_clientId: Client is inactive.");
return Task.FromResult<object>(null);
}
@ -75,9 +83,9 @@ namespace Yavsc
logger.LogInformation($"\\o/ ValidateClientAuthentication: Validated ({clientId})");
context.Validated();
}
else Startup.logger.LogInformation($":'( ValidateClientAuthentication: KO ({clientId})");
else logger.LogInformation($":'( ValidateClientAuthentication: KO ({clientId})");
}
else Startup.logger.LogWarning($"ValidateClientAuthentication: neither Basic nor Form credential were found");
else logger.LogWarning($"ValidateClientAuthentication: neither Basic nor Form credential were found");
return Task.FromResult(0);
}
UserManager<ApplicationUser> _usermanager;

View file

@ -254,10 +254,12 @@ namespace Yavsc
});
CheckServices(services);
}
static ApplicationDbContext _dbContext;
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
IOptions<SiteSettings> siteSettings,
public void Configure(
IApplicationBuilder app, IHostingEnvironment env,
ApplicationDbContext dbContext, IOptions<SiteSettings> siteSettings,
IOptions<RequestLocalizationOptions> localizationOptions,
IOptions<OAuth2AppSettings> oauth2SettingsContainer,
IAuthorizationService authorizationService,
@ -267,6 +269,7 @@ namespace Yavsc
UserManager<ApplicationUser> usermanager,
ILoggerFactory loggerFactory)
{
_dbContext = dbContext;
_usermanager = usermanager;
GoogleSettings = googleSettings.Value;
ResourcesHelpers.GlobalLocalizer = localizer;