2

ASP.net MVC と WebAPI を中心に構築された SaaS アプリケーションに取り組んでおり、企業が私のサービスを簡単に使用できるようにしたいと考えています。例としては、Office 365 基本認証 (アクティブ プロファイル) が挙げられます。ユーザーは、Microsoft のサイト (またはデスクトップ アプリ) でユーザー名/パスワードを入力し、雇用主の Active Directory に対して認証されます。これまでのところ、資格情報を受け入れる RP-STS を作成し、それらをクライアント企業の AD サーバーで実行されている AD FS プロキシに転送する必要があると理解しています。これは正しいです?

はいの場合、どうすればこれを実装できますか? Relying Party と AD FS Proxy Role を追加して AD サーバーをセットアップするのは簡単なので、実際には問題になりません。RP-STS サービスを作成/セットアップする方法と、このプロセスに関連するその他の手順を理解する必要があります。.net には、これの例/チュートリアルはありません

4

3 に答える 3

3

この msdn ブログ投稿は、あなたが求めているものを正確に説明していると思います。通常の WCF サービスを作成して RP を作成し、提供されたユーティリティを使用して ADFS を信頼するようにサービスを構成するなど、プロセス全体の完全なチュートリアルが含まれています。

http://blogs.msdn.com/b/mcsuksoldev/archive/2011/08/17/federated-security-how-to-setup-and-call-a-wcf-service-secured-by-adfs-2- 0.aspx

編集:

リンクされた記事 (コメントは私のもの) から取得したこのコードは、アクティブなフェデレーションのデモンストレーションです。クライアント アプリケーションは、ADFS からセキュリティ トークンを手動で取得しています。パッシブ フェデレーションでは、ユーザーをセキュリティで保護された Web ページに転送し、そこで資格情報を ADFS に直接送信できます。パッシブ フェデレーションの主な利点は、エンド ユーザーの秘密の資格情報が ADFS に直接提供され、RP のクライアント側コードがアクセスできないことです。

var requestTokenResponse = new RequestSecurityTokenResponse();

//The line below is the 'Active' federation
var token = Token.GetToken(@"mydomain\testuser", "p@ssw0rd", "http://services.testdomain.dev/wcfservice/Service.svc", out requestTokenResponse);

var wcfClient = new FederatedWCFClient<MyTestService.IService>(token, "WS2007FederationHttpBinding_IService");   // This must match the app.config
var client = wcfClient.Client as MyTestService.IService;
var result = client.GetData();
Console.WriteLine(result);
wcfClient.Close();
于 2015-07-01T21:36:52.120 に答える
0

ブログで答えを見つけました: http://leandrob.com/2012/04/requesting-a-token-from-adfs-2-0-using-ws-trust-with-username-and-password/

このコードが本質的に行うことは、テナントの ADFS エンドポイントで直接認証し、トークンも取得することです。それが私が探していたものです。

var stsEndpoint = "https://[server]/adfs/services/trust/13/UsernameMixed";
var relayPartyUri = "https://localhost:8080/WebApp";

var factory = new WSTrustChannelFactory(
    new UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential),
    new EndpointAddress(stsEndpoint));

factory.TrustVersion = TrustVersion.WSTrust13;

// Username and Password here...
factory.Credentials.UserName.UserName = user;
factory.Credentials.UserName.Password = password;

var rst = new RequestSecurityToken 
{
    RequestType = RequestTypes.Issue,
    AppliesTo = new EndpointAddress(relayPartyUri),
    KeyType = KeyTypes.Bearer,
};

var channel = factory.CreateChannel();

SecurityToken token = channel.Issue(rst);

そのブログのもう 1 つの良い記事は次のとおりです。 java-node-js-or-any-platform-or-language/ - 他の同様のシナリオをカバーしています。

于 2015-07-09T03:09:42.053 に答える