2016-07-31 15 views
1

JWTベアラ認証を使用してAzure ADでASP.Netアプリケーションを保護する方法の例がたくさんあります。それは同様に、あなたのスタートアップにあなたのAADに関するいくつかの情報を追加するのと同じくらい簡単です:コンソールアプリケーションでのAzure ADベアラトークンの検証

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    app.UseJwtBearerAuthentication(new JwtBearerOptions 
    { 
     Authority = "https://login.windows.net/...", 
     Audience = "...", 
    }); 

    app.UseMvc(); 
} 

何もこれらの例が間違っている、すべてのトークンの検証 - マジックは、舞台裏で起こる、あなたが取る必要はありませんそれについて気をつけてください。しかし実際には、ASP.Netとは別にAzure ADベアラトークンを検証する方法を知りたいと思っています。コンソールアプリケーションで使用します。コンソールアプリケーション内

、私は次のようなものを期待する:

public static void Main(string[] args) 
{ 
    string token = "..."; 

    JwtSecurityToken validatedJwtToken = validateJwtToken(token); 
} 

private static JwtSecurityToken validateJwtToken(string token) 
{ 
    JwtSecurityToken jwtToken = new JwtSecurityToken(token) 

    // 
    // how to validate the AAD token?! 
    // 

    if(/* is valid */) 
    { 
     return jwtToken; 
    } 
    else 
    { 
     return null; 
    } 
} 

は、残念ながら私はまだ作業例を見つけたdid'tが、私はこの問題の簡単な解決策はありません想像することはできません。どんなアドバイスもありがとうございます!

答えて

2

は、ソリューションが見つかりました - https://github.com/Azure-Samples/active-directory-dotnet-webapi-manual-jwt-validationに基づく:

private const string AUDIANCE = "<GUID of your Audiance>"; 
private const string TENANT = "<GUID of your Tenant>"; 

private static async Task<SecurityToken> validateJwtTokenAsync(string token) 
{ 
    // Build URL based on your AAD-TenantId 
    var stsDiscoveryEndpoint = String.Format(CultureInfo.InvariantCulture, "https://login.microsoftonline.com/{0}/.well-known/openid-configuration", TENANT); 

    // Get tenant information that's used to validate incoming jwt tokens 
    var configManager = new ConfigurationManager<OpenIdConnectConfiguration>(stsDiscoveryEndpoint); 

    // Get Config from AAD: 
    var config = await configManager.GetConfigurationAsync(); 

    // Validate token: 
    var tokenHandler = new JwtSecurityTokenHandler(); 

    var validationParameters = new TokenValidationParameters 
    { 
     ValidAudience = AUDIANCE, 
     ValidIssuer = config.Issuer, 
     IssuerSigningTokens = config.SigningTokens, 
     CertificateValidator = X509CertificateValidator.ChainTrust, 
    }; 

    var validatedToken = (SecurityToken)new JwtSecurityToken(); 

    // Throws an Exception as the token is invalid (expired, invalid-formatted, etc.) 
    tokenHandler.ValidateToken(token, validationParameters, out validatedToken); 

    return validatedToken; 
} 

これだけの生の基礎とだけnet452を用いて試験しました。上記のリンクをもう一度見てください(たとえば、特定の時間SigningTokensをキャッシュするなど)。

+0

アセンブリ 'System.IdentityModel.Tokens.Jwt、Version = 5.0.0.127、Culture = neutral、PublicKeyToken = 31bf3856ad364e35'から 'System.IdentityModel.DateTimeUtil'タイプを読み込めませんでした。上記のコードを実行すると –

+0

どのフレームワークを使用しましたか?このサンプルコードは、net452を使用してのみテストされました。私は私のポストにメモを追加します。 – MrFiveT

関連する問題