2017-06-22 4 views
0

私は、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; 
} 

おかげで、

答えて

0

を使用している私は、クライアントから得た有効なアクセストークンにしようとしていたものですMicrosoft Graph APIより、トークン要求でresourceとしてAPIを指定する必要があります。お使いのウェブAPIをOAuth2Permissionスコープを設定した

  1. があることを確認します。ここを参照してください。 Configuring a resource application to expose web APIs

  2. お客様のクライアントアプリケーションは、公開されたAPIに対するアクセス許可を選択しています。 Configuring a client application to access web APIs
  3. 最後に、Web APIのApp ID URIまたはApp ID GUIDをトークン要求のリソース値として使用することを確認してください。

これが役立つ場合はお知らせください。

+0

ありがとうございました。しかし、私はいくつかの新しい問題を抱えています。ステップ2では、登録したクライアントアプリケーションが統合アプリケーションでした。私のAPIからではなく、Microsoft Graphからのみアクセス許可を追加できます。 APIのApp ID URIを持ってきたら、クライアントのスコープが存在しないというエラーが表示されます。そこでAzure Portalにクライアントアプリケーションを登録し、上記の手順2でAPIアプリケーションからのアクセス許可を追加しましたが、手順3でv2.0エンドポイントからエラーが発生しました:AADSTS70001:このAPIバージョンではアプリケーション "xxxx"はサポートされていません。私はv2.0エンドポイントでMSALを使用しています。統合アプリケーションクライアントのみをサポートしていますか? – up2pixy

+0

現在、V2アプリケーションモデルは[スタンドアロンWeb API]のみをサポートしています(https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-limitations#restrictions-on-app -タイプ)。あなたのシナリオでは、ADALとV1エンドポイントを使用することを意味するV1アプリケーションモデルを完全に使用する必要があるかもしれません。 –

関連する問題