Hi again @sandrino-a0,
The Xamarin app seems to be fine. Here is the code it uses to log in and get the token and claims:
using System.Threading.Tasks;
using AnnoLog.Common;
using AnnoLog.Droid.Services;
using Auth0.OidcClient;
using IdentityModel.OidcClient.Browser;
using Xamarin.Forms;
using static AnnoLog.Common.GlobalInfo;
[assembly: Dependency(typeof(AuthenticationService))]
namespace AnnoLog.Droid.Services
{
public class AuthenticationService : IAuthService
{
private Auth0Client _auth0Client;
public AuthenticationService()
{
_auth0Client = new Auth0Client(new Auth0ClientOptions
{
Domain = AuthConfig.Domain,
ClientId = AuthConfig.ClientId
});
}
public AuthenticationResult AuthenticationResult { get; private set; }
public async Task<AuthenticationResult> Authenticate()
{
var auth0LoginResult = await _auth0Client.LoginAsync(new { audience = AuthConfig.Audience });
AuthenticationResult authenticationResult;
if (!auth0LoginResult.IsError)
{
authenticationResult = new AuthenticationResult()
{
AccessToken = auth0LoginResult.AccessToken,
IdToken = auth0LoginResult.IdentityToken,
UserClaims = auth0LoginResult.User.Claims
};
}
else
{
authenticationResult = new AuthenticationResult(auth0LoginResult.IsError, auth0LoginResult.Error);
}
AuthenticationResult = authenticationResult;
return authenticationResult;
}
I changed my startup.cs file according to your example.
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace WebApplication1
{
public class Startup
{
public IConfiguration _configuration;
public Startup(IConfiguration configuration)
{
_configuration = configuration;
}
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
// Configure JWT authentication.
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearerConfiguration(
_configuration["Jwt:Issuer"],
_configuration["Jwt:Audience"]
);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
app.UseStaticFiles();
}
}
}
If I configure an API with the audience as localhost:port is it likely to work? I will try it anyway. One problem I am having is being able to debug the API.
Regards,
Rob