实施 Office 365 风格的基本身份验证(活动配置文件)
Implement Office 365 styled Basic Authentication (Active Profile)
我正在开发一个围绕 ASP.net MVC 和 WebAPI 构建的 SaaS 应用程序,希望让企业能够轻松使用我的服务。示例是 Office 365 基本身份验证(Active Profile),用户在 Microsoft 的站点(或桌面应用程序)上输入他的 username/password,然后他根据其雇主的 Active Directory 进行身份验证。到目前为止,我的理解是我需要创建一个 RP-STS,它将接受凭据,然后将这些凭据转发到客户公司 AD 服务器上的 AD FS 代理 运行。这是正确的吗?
如果是,那我该如何实现呢?设置添加依赖方和 AD FS 代理角色的 AD 服务器很容易,所以这真的不是问题。我只需要弄清楚如何 create/setup RP-STS 服务以及此过程中涉及的任何其他步骤。 .net
中没有 example/tutorial
我相信这个 msdn 博客 post 准确描述了您的要求。它完整地演练了整个过程,包括通过创建普通 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();
看看这些链接:
https://github.com/OfficeDev/O365-WebApp-SingleTenant
https://github.com/OfficeDev/O365-WebApp-MultiTenant
它展示了如何使用 Office 365 api 制作一个应用程序来对用户进行身份验证和授权。
了解单租户和多租户应用程序,并选择正确的。
这真的很容易做到,我几个月前就做到了。
这段代码本质上做的是直接使用租户的 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/ - 涵盖了其他类似的场景。
我正在开发一个围绕 ASP.net MVC 和 WebAPI 构建的 SaaS 应用程序,希望让企业能够轻松使用我的服务。示例是 Office 365 基本身份验证(Active Profile),用户在 Microsoft 的站点(或桌面应用程序)上输入他的 username/password,然后他根据其雇主的 Active Directory 进行身份验证。到目前为止,我的理解是我需要创建一个 RP-STS,它将接受凭据,然后将这些凭据转发到客户公司 AD 服务器上的 AD FS 代理 运行。这是正确的吗?
如果是,那我该如何实现呢?设置添加依赖方和 AD FS 代理角色的 AD 服务器很容易,所以这真的不是问题。我只需要弄清楚如何 create/setup RP-STS 服务以及此过程中涉及的任何其他步骤。 .net
中没有 example/tutorial我相信这个 msdn 博客 post 准确描述了您的要求。它完整地演练了整个过程,包括通过创建普通 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();
看看这些链接:
https://github.com/OfficeDev/O365-WebApp-SingleTenant https://github.com/OfficeDev/O365-WebApp-MultiTenant
它展示了如何使用 Office 365 api 制作一个应用程序来对用户进行身份验证和授权。
了解单租户和多租户应用程序,并选择正确的。
这真的很容易做到,我几个月前就做到了。
这段代码本质上做的是直接使用租户的 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/ - 涵盖了其他类似的场景。