私は、Microsoft Graphの暗黙的なフローを使用してユーザーを認証しようとしているトークンを使用して、別のエンドポイントでAPIを呼び出すためにmsal.jsを使用しますアクセストークンを取得します。Microsoft Graph APIアクセストークンの署名検証に失敗しました
APIトークンをAPIエンドポイントに持ってきて、それを有効にしようとすると、トークンを有効にできません。私はSignatureVerificationFailedExceptionを取得しました。
私の理解では、アクセストークンは私のAPIではなくMicrosoft Graph API用であるため、私はそれを有効にできません。 (私は問題なくGraph APIを呼び出すために使用できます)
私のAPIには使用できるがMicrosoft Graphでは使用できないmsal.jsを使用して、アクセストークン(IDトークンではない)を取得するにはどうすればよいですか?ありがとう!
IDトークンの代わりにIDトークンをAPIエンドポイントに送信する理由は、IDトークンでは使用できないトークンからpuidクレームを取得したいからです。ここで
はあなたではなくあなたのAPIのアクセストークンを取得したい場合は、私はmsal.jsに
const string authority = "https://login.microsoftonline.com/common";
const string audience = "https://graph.microsoft.com";
string issuer = null;
string stsDiscoveryEndpoint = $"{authority}/v2.0/.well-known/openid-configuration";
List<SecurityToken> signingTokens = null;
var configManager = new ConfigurationManager<OpenIdConnectConfiguration>(stsDiscoveryEndpoint);
var config = await configManager.GetConfigurationAsync();
issuer = config.Issuer;
signingTokens = config.SigningTokens.ToList();
var tokenHandler = new JwtSecurityTokenHandler();
var validationParameters = new TokenValidationParameters
{
ValidAudience = audience,
ValidIssuer = issuer,
ValidateIssuer = false,
IssuerSigningTokens = signingTokens,
CertificateValidator = X509CertificateValidator.None
};
try
{
// Validate token.
SecurityToken validatedToken = new JwtSecurityToken();
var claimsPrincipal = tokenHandler.ValidateToken(jwtToken, validationParameters, out validatedToken);
var claimsIdentity = claimsPrincipal.Identity as ClaimsIdentity;
return ExtractAuthenticatedUserFromClaimsIdentity(claimsIdentity);
}
catch (SignatureVerificationFailedException)
{
throw;
}
おかげで、
ありがとうございました。しかし、私はいくつかの新しい問題を抱えています。ステップ2では、登録したクライアントアプリケーションが統合アプリケーションでした。私のAPIからではなく、Microsoft Graphからのみアクセス許可を追加できます。 APIのApp ID URIを持ってきたら、クライアントのスコープが存在しないというエラーが表示されます。そこでAzure Portalにクライアントアプリケーションを登録し、上記の手順2でAPIアプリケーションからのアクセス許可を追加しましたが、手順3でv2.0エンドポイントからエラーが発生しました:AADSTS70001:このAPIバージョンではアプリケーション "xxxx"はサポートされていません。私はv2.0エンドポイントでMSALを使用しています。統合アプリケーションクライアントのみをサポートしていますか? – up2pixy
現在、V2アプリケーションモデルは[スタンドアロンWeb API]のみをサポートしています(https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-limitations#restrictions-on-app -タイプ)。あなたのシナリオでは、ADALとV1エンドポイントを使用することを意味するV1アプリケーションモデルを完全に使用する必要があるかもしれません。 –