private static async Task SignIn() { // create a redirect URI using an available port on the loopback address. // requires the OP to allow random ports on 127.0.0.1 - otherwise set a static port var browser = new SystemBrowser(); string redirectUri = string.Format($"http://127.0.0.1:{browser.Port}"); var options = new OidcClientOptions { Authority = Constants.Authority, ClientId = "console.pkce", RedirectUri = redirectUri, Scope = "openid profile resource1.scope1", FilterClaims = false, Browser = browser }; var serilog = new LoggerConfiguration() .MinimumLevel.Error() .Enrich.FromLogContext() .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message}{NewLine}{Exception}{NewLine}") .CreateLogger(); options.LoggerFactory.AddSerilog(serilog); _oidcClient = new OidcClient(options); var result = await _oidcClient.LoginAsync(new LoginRequest()); ShowResult(result); await NextSteps(result); }
private static async Task FrontChannel(string scope, IEnumerable <string> resource) { // create a redirect URI using an available port on the loopback address. // requires the OP to allow random ports on 127.0.0.1 - otherwise set a static port var browser = new SystemBrowser(); string redirectUri = string.Format($"http://127.0.0.1:{browser.Port}"); var options = new OidcClientOptions { Authority = Constants.Authority, ClientId = "console.resource.indicators", RedirectUri = redirectUri, Scope = scope + " offline_access", FilterClaims = false, LoadProfile = false, Browser = browser, Policy = { RequireIdentityTokenSignature = false } }; var serilog = new LoggerConfiguration() .MinimumLevel.Warning() .Enrich.FromLogContext() .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message}{NewLine}{Exception}{NewLine}") .CreateLogger(); options.LoggerFactory.AddSerilog(serilog); _oidcClient = new OidcClient(options); var request = new LoginRequest { FrontChannel = { Resource = resource.ToList() } }; var result = await _oidcClient.LoginAsync(request); var parts = result.AccessToken.Split('.'); var header = parts[0]; var payload = parts[1]; Console.WriteLine(); Console.WriteLine("Standard access token:"); Console.WriteLine(Encoding.UTF8.GetString(Base64Url.Decode(header)).PrettyPrintJson()); Console.WriteLine(Encoding.UTF8.GetString(Base64Url.Decode(payload)).PrettyPrintJson()); await BackChannel(result); }