2017-06-22 81 views
0

我有一個Angular 4站點,我正在嘗試使用Microsoft Graph隱式流來驗證用戶,然後使用令牌在另一個端點調用我們的API,因此我使用msal.js獲取訪問令牌。Microsoft Graph API訪問令牌的簽名驗證失敗

後,我把訪問令牌我的API端點,並嘗試有效的話,該令牌可以是無效的。我有一個SignatureVerificationFailedException。

我的理解是,訪問令牌是針對微軟圖形API,而不是我的API,這樣我就可以無效的。 (我可以用它來調用Graph API沒有問題)

我怎樣才能獲得一個訪問令牌(不是id令牌)使用msal.js可以用於我的API但不是Microsoft Graph?謝謝!

我向API端點發送訪問令牌而不是ID令牌的原因是我想從令牌獲取puid聲明,該令牌不能用於id令牌。

這是我試圖有效的訪問令牌,我從客戶端得到了。如果你想獲得一個訪問令牌的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,您必須在令牌請求中指定您的API爲resource

確保:

  1. 你的網絡API已經配置OAuth2Permission作用域。看這裏。 Configuring a resource application to expose web APIs
  2. 客戶端應用程序已經選擇權限,這些公開的API。 Configuring a client application to access web APIs
  3. 最後,確保你使用你的Web API的App ID URI或應用ID GUID在你的令牌請求的資源價值。

讓我知道這是否有幫助!

+0

謝謝你的回答。但是,我遇到了一些新問題:在第2步中,我註冊的客戶端應用程序是一個融合應用程序。它只能從Microsoft Graph中添加權限,而不能從我的API中添加權限。如果我帶上我的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 -types)。可能需要在場景中完全使用V1應用程序模型,這意味着使用ADAL和V1端點。 –

相關問題