2017-02-07 10 views
0

.NET Framework 4.5で動作するコードがありますが、.NET 3.5では同等のものが必要です。そして、私の問題は、ほとんどすべての私のGoogle検索結果が、新しいWIFを使った解決法か、古いWIF 3.5の一般的な情報になることです。.NET 3.5でAuthenticationContext.AcquireToken相当のものがあります

コードは次のようになります。

using Microsoft.IdentityModel.Clients.ActiveDirectory; 

namespace x 
{ 
    class y 
    { 
     public string GetAuthenticationHeader(Ax7Config config) 
     { 
      var user = new UserCredential(config.username, config.password); 
      return new AuthenticationContext(config.tenant) 
       .AcquireToken(config.resource, config.clientAppId, user) 
       .CreateAuthorizationHeader(); 
     } 
    } 
} 

PS: たDLLが3.5の.NET Framework上で動作するアプリケーションでプラグインとしてインポートされ、最新のフレームワークに再コンパイルすることはできません。それはうまくいきません。

Ps: .CreateAuthorizationHeader()はちょうど"Bearer " + AccessTokenを返します。それは問題ではありません。 AccessTokenを取得するには

答えて

0

最後に、AcquireTokenはあなたのSTSにhttpsリクエストを送信します。これを自分で簡単にシミュレートできます。リクエストは(AADのため)このように書き:これは、Webクライアント(p.e; How to fill forms and submit with Webclient in C#)で行うのは簡単です

POST https://login.microsoftonline.com/your-tenant-id/oauth2/token HTTP/1.1 
Accept: application/json 
x-client-Ver: 3.13.5.907 
x-client-CPU: x64 
x-client-OS: Microsoft Windows NT 6.2.9200.0 
x-ms-PKeyAuth: 1.0 
client-request-id: 10a9f6d3-1247-493e-874f-fab04e1427c7 
return-client-request-id: true 
Content-Type: application/x-www-form-urlencoded 
Host: login.microsoftonline.com 
Content-Length: 183 
Expect: 100-continue 
Connection: Keep-Alive 

resource=your-resource-guid&client_id=your-lcient-guid&client_secret=***** CREDENTIALS REMOVED HERE *****&grant_type=client_credentials 

。サーバーの応答は一般的にこのようなものになります。

HTTP/1.1 200 OK 
Cache-Control: no-cache, no-store 
... 
Content-Type: application/json; charset=utf-8 
Expires: -1 
Server: Microsoft-IIS/8.5 
Strict-Transport-Security: max-age=31536000; includeSubDomains 
X-Content-Type-Options: nosniff 
client-request-id: 10a9f6d3-1247-493e-874f-fab04e1427c7 
x-ms-request-id: bla-bla 
… 
X-Powered-By: ASP.NET 
Date: Thu, 23 Feb 2017 08:35:26 GMT 
Content-Length: 1278 

{"token_type":"Bearer","expires_in":"3599","ext_expires_in":"10800","expires_on":"1487842528","not_before":"1487838628","resource":"your-resource-id","access_token":"your-access-token"} 

結果は、JSONで、トークンは「access_tokenは」フィールドです。あなたはフィドラーのようなツールを使ってあなたの要求を正しく得ることができますが、それは基本的にそこにあるものです。 (あなたはおそらくNewtonsoftを使ってjsonを適切に非直列化します。)

私はそれがすべてあなたのためにしてくれるとは言いません。 ADALはトークンキャッシュのようなことを行いますので、各呼び出しでトークンを要求する必要はなく、自動的に有効期限などを処理しますが、コードを少し変更するだけでそれも可能です。 これが役立つことを願っています。

関連する問題