我正在研究围绕ASP.net MVC构建的SaaS应用程序。 WebAPI并希望企业能够轻松使用我的服务。示例将是Office 365基本身份验证(活动配置文件),其中用户在microsoft的站点(或桌面应用程序)上输入他的用户名/密码,并且他通过其雇主的Active Directory进行身份验证。到目前为止,我的理解是我需要创建一个RP-STS,它将接受凭证,然后将它们转发到在客户公司的AD服务器上运行的AD FS代理。这是对的吗?
如果是,那我该如何实现呢?设置AD服务器添加依赖方和AD FS代理角色很容易,因此这确实不是问题。我只需要弄清楚如何创建/设置RP-STS服务以及此过程中涉及的任何其他步骤。在.net
中没有这个示例/教程答案 0 :(得分:3)
我相信这篇msdn博客文章准确描述了你的要求。它包含整个过程的完整演练,包括通过创建普通WCF服务来创建RP,然后使用提供的实用程序将服务配置为信任您的ADFS。
编辑:
此代码取自链接文章(评论为我的),是活动联盟的演示。客户端应用程序正在从ADFS手动检索安全令牌。被动联盟将涉及将用户转发到安全网页,在该网页中他们可以将其凭证直接发送到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();
答案 1 :(得分:2)
看一下这些链接:
https://github.com/OfficeDev/O365-WebApp-SingleTenant https://github.com/OfficeDev/O365-WebApp-MultiTenant
它展示了如何使用office 365 api对应用程序进行身份验证和授权。
请注意Single Tenant和Mult Tentant应用程序,并选择正确的应用程序。
这样做真的很容易,几个月前我就完成了。
答案 2 :(得分:0)
此代码基本上做的是它直接对租户的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);
该博客上的另一篇好文章是:http://leandrob.com/2012/02/request-a-token-from-adfs-using-ws-trust-from-ios-objective-c-iphone-ipad-android-java-node-js-or-any-platform-or-language/ - 其中包含其他类似的情景。