首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用SAML和Azure AD设置SSI的最佳方法

用SAML和Azure AD设置SSI的最佳方法
EN

Stack Overflow用户
提问于 2018-10-25 21:18:07
回答 2查看 455关注 0票数 0

基于本文,我认为您可以使用SAML标准使用Azure AD对web应用程序上的用户进行身份验证:

https://learn.microsoft.com/en-us/azure/active-directory/develop/single-sign-on-saml-protocol

然而,对于实现这一目标所需的所有小步骤还不完全清楚。因此,我进行了一次尝试,并做了以下工作,为自己找出了第一步,即获取服务提供者需要的URL,以便使用IdP (即Azure )重定向浏览器进行身份验证:

  • 我在Azure设立了一个独立的广告,免费的。
  • 在那个AD中,我创建了一个应用程序。
  • 应用程序中没有设置SSI的选项

然后使用以下代码为SAML浏览器请求生成URL:

代码语言:javascript
复制
using System;
using System.IO;
using System.IO.Compression;
using System.Text;

namespace AzureSAMLExperiment
{
    class Program
    {
        // Call to https://login.microsoftonline.com/common/FederationMetadata/2007-06/FederationMetadata.xml returns the SingleSignOnService element below:

        public const string SingleSignOnServiceUrl = "https://login.microsoftonline.com/common/saml2";
        public const string SingleSignOnQueryString = "?SAMLRequest={0}";

        static void Main(string[] args)
        {
            // See https://learn.microsoft.com/en-us/azure/active-directory/develop/single-sign-on-saml-protocol
            var SAMLRequestXML = $@"<samlp:AuthnRequest
xmlns=""urn:oasis:names:tc:SAML:2.0:assertion""
ID=""id6c1c178c166d486687be4aaf5e482730""
Version=""2.0"" IssueInstant=""{DateTime.UtcNow.ToString("o")}""
xmlns:samlp=""urn:oasis:names:tc:SAML:2.0:protocol"">
<Issuer xmlns=""urn:oasis:names:tc:SAML:2.0:assertion"">ISSUER</Issuer>
</samlp:AuthnRequest>";

            var url = $"{SingleSignOnServiceUrl}?SAMLRequest={DeflateEncode(SAMLRequestXML)}";
        }

        private static string DeflateEncode(string val)
        {
            var memoryStream = new MemoryStream();
            using (var writer = new StreamWriter(new DeflateStream(memoryStream, CompressionMode.Compress, true), new UTF8Encoding(false)))
            {
                writer.Write(val);
                writer.Close();

                return Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.Length, Base64FormattingOptions.None);
            }
        }
    }
}

并将结果URL放在浏览器中。

我为发行者尝试了几个不同的值,包括

但这些都没有用。

如您所见,我使用的是公共URL,而不是特定于租户的URL。我不知道哪一种最好用。

在任何情况下,我在访问url时都得到了以下响应:

关于我做错了什么有什么指示吗?

  • 我需要一个高级广告还是免费的?
  • 我应该使用租户还是共同的终点?
  • 我使用的XML或编码有什么问题吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-26 03:49:56

Azure AD免费提供活动目录服务。要通过SAML协议连接到活动目录,您需要切换到付费计划。一旦您进行了付费计划并配置了SAML设置,Azure将充当SAML IdP (身份提供者)。此时,我建议使用配置为SAML (服务提供者)的外部IAM服务来测试身份验证流,而不是自己制定解决方案。例如,您可以为此目的尝试Auth0作为SAML

在上面的设置中,架构应该是这样的;

Your App <= OAuth => Auth0 <= SAML => Azure AD

如果您不想为SAML支持支付Azure,您可以将用户联合到Azure AD,并使用WsFed协议。这也是支持Auth0

Your App <= OAuth => Auth0 <= WsFed => Azure AD

如果您需要在应用程序中支持SAML协议,那么这个链接可能对.Net的一些链接很有用,并且还提供了一些更多的链接,以便更广泛地了解各种可能性。

免责声明:我为Auth0工作。

票数 1
EN

Stack Overflow用户

发布于 2018-10-28 19:04:30

是的,您需要Azure广告特价。

下面是一个使用自定义SAML连接的示例

然后是Azure AD / Enterprise applications / SSO。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52998250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档