Aber wenn ich versuche, mich zu authentifizieren, wird ein http 401-Fehler „Unauthorized“ zurückgegeben.
Im Controller fehlen alle Ansprüche und der Controller gibt einen http 500-internen Serverfehler zurück.
Hier ist mein Code:
Code: Select all
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = new[] { clientId },
TokenValidationParameters = new TokenValidationParameters
{
ValidAudience = clientId,
ValidateAudience = true,
ValidIssuer = issuer,
ValidateIssuer = true,
ValidateIssuerSigningKey = true,
ValidateLifetime = true,
ClockSkew = TimeSpan.FromMinutes(5)
},
IssuerSecurityTokenProviders = new[]
{
new OpenIdConnectCachingSecurityTokenProvider(
$"{authority}/.well-known/openid-configuration")
}
});
}
public OpenIdConnectCachingSecurityTokenProvider(string metadataEndpoint)
{
var wc = new WebClient();
var metadata = JObject.Parse(wc.DownloadString(metadataEndpoint));
Issuer = metadata["issuer"].ToString();
var jwksUri = metadata["jwks_uri"].ToString();
var keysJson = wc.DownloadString(jwksUri);
var jwks = JObject.Parse(keysJson);
var tokens = new List();
foreach (var key in jwks["keys"])
{
var x5cArray = key["x5c"] as JArray;
if (x5cArray == null || x5cArray.Count == 0)
continue;
var certString = x5cArray[0].ToString();
var certBytes = Convert.FromBase64String(certString);
var cert = new System.Security.Cryptography.X509Certificates.X509Certificate2(certBytes);
var securityToken = new X509SecurityToken(cert);
tokens.Add(securityToken);
}
SecurityTokens = tokens;
}
Mobile version