标签: acs

解析webconfig时出现Windows Azure间歇性身份错误

这个问题在发布后似乎随机发生. 该网站将正常工作,然后bam,我得到这个错误解析webconfig.我只是重新发布,它再次正常工作.发布时,我选中了该框以删除现有文件,因此不应该存在垃圾.

这是一个使用.net 4.5和Azure访问控制服务(ACS)与Yahoo!集成的MVC4项目.从Yahoo重定向时会发生此错误.这种方式每次都会发生,但我发现了一个帖子(当然我现在找不到),其中4.5.1 Identity和Access Visual Studio集成存在错误.我去了以前的版本,现在只是有时候.

ID8030:无法解析'type'属性的值.
验证'<issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry"><authority name="[my authority]"><keys><add thumbprint="[print]" /></keys><validIssuers><add name="[issuer]" /></validIssuers></authority></issuerNameRegistry>'元素的type属性是否正确.

在上面的错误消息中,我已替换此帖子的括号([])中的项目.

这是堆栈跟踪:

[TypeLoadException: ID8030: The value of the 'type' property could not be parsed. *** element is correct.]
System.IdentityModel.Configuration.TypeResolveHelper.Resolve(ConfigurationElementInterceptor customTypeElement, Type customType) +602659
System.IdentityModel.Configuration.IdentityConfiguration.GetIssuerNameRegistry(IssuerNameRegistryElement element) +114
System.IdentityModel.Configuration.IdentityConfiguration.LoadHandlerConfiguration(IdentityConfigurationElement element) +841
System.IdentityModel.Configuration.IdentityConfiguration.LoadConfiguration(IdentityConfigurationElement element) +117
System.IdentityModel.Configuration.IdentityConfiguration..ctor(String identityConfigurationName) +180
System.IdentityModel.Services.Configuration.FederationConfiguration.LoadConfiguration(FederationConfigurationElement element) +392
System.IdentityModel.Services.Configuration.FederationConfiguration..ctor(Boolean loadConfig) +94
System.IdentityModel.Services.FederatedAuthentication.CreateFederationConfiguration() +71
System.IdentityModel.Services.FederatedAuthentication.get_FederationConfiguration() +85
System.IdentityModel.Services.HttpModuleBase.Init(HttpApplication context) +56
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +418
System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr …
Run Code Online (Sandbox Code Playgroud)

web-config azure federated-identity acs asp.net-mvc-4

6
推荐指数
2
解决办法
5753
查看次数

如何使用Azure ACS开发用户身份验证的REST服务

我正在开发一个使用MS Azure访问控制服务进行身份验证的REST服务.如果示例是任何指示,则以这种方式保护REST服务的典型方法是为受保护服务提供全局用户名和pw,私钥或X.509证书.但是,我想在移动设备上使用被动用户登录机制,其流程更像以下内容:

  1. 未经身份验证的用户尝试从应用程序访问受保护的服务
  2. 移动应用重定向到浏览器应用(或嵌入式浏览器)
  3. 用户从ACS登录页面选择用于登录(facebook,google等)的身份提供者
  4. 用户输入身份提供者的凭据
  5. 浏览器重定向回应用程序
  6. 应用程序以某种方式获取SWT令牌以用于后续REST请求.

我坚持第5步 - 获取SWT令牌,而我发现的现有示例似乎并没有解决这个问题.此外,我实际上正在尝试使用WPF中的桌面客户端构建概念验证,这可能会使事情变得复杂.任何人都可以建议一个特定的教程或追求的路径使用每用户身份验证与每服务?谢谢.

编辑: 当我深入研究这个问题时,我意识到下面发布的示例(以及大多数其他示例)都是基于OAuth WRAP,已经弃用了OAuth 2.0.任何人都可以建议更新的参考?谷歌搜索出现了http://blogs.msdn.com/b/adventurousidentity/archive/2011/09/18/acs-v2-oauth-2-0-delegation-support-explained.aspxhttp:// connect. microsoft.com/site116​​8/Downloads/DownloadDetails.aspx?DownloadID=32719但它们并不是最直观的.

oauth azure oauth-2.0 acs

5
推荐指数
1
解决办法
4393
查看次数

Azure ACS - 最佳实践实施

大家好,我们正在从头开始在Windows Azure上运行ASP.NET MCV 3应用程序.关于身份验证和授权层,我们正在考虑使用访问控制服务.我看了一些关于ACS的文章,我得到了基本的想法,但我仍然有一些疑问.

我的理解是,使用ACS我们将身份验证过程外包给一个或多个身份提供商(IP),基本上我们相信另一个系统(即Microsoft Live ID)来验证我们的用户.基本过程非常简单:在身份验证阶段,我们将用户重定向(ACS执行)到我们的"受信任"IP之一,这会将用户(使用有效令牌)重定向到ACS并最终重定向到我们的应用程序.这里有很多问题......

由于我们不希望所有具有Live ID帐户的用户都可以访问我们的应用程序,因此我认为应该有另一个流程来验证该用户并检查他是否在我们的应用程序中注册.问题是在哪里?在ACS或我们的应用程序中.?

我对此有一个想法,但我不知道这是否是正确的方法:在注册阶段,系统(我们的网络应用程序)询问用户哪个IP(即Live ID,Google,Facebook和我们的应用程序) .)他想用来在应用程序中验证自己.然后用户在IP系统上进行身份验证过程,当他回来时,我们将他的用户名(IP用户名)存储在我们的数据库中.因此,下次在身份验证阶段,我们可以检查该用户是否已在我们的系统中注册.

如果上述理论是正确的,那就意味着我们的应用程序.我们需要建立会员提供商来存储来自IP的用户名和选择我们应用的用户.作为IP.我对么?设计上述过程的最佳做法是什么?

现在让我们来谈谈授权和"角色".它如何与ACS一起使用?ACS是否为每个用户管理多个角色?

我的理解是,使用ACS,您可以创建许多与IP相关的"规则组",而不是单个用户.如果这是正确的,我们如何在我们的应用程序中管理角色中的用户?比方说,我们有多个角色,我们的用户可以与这些角色相关联,我们可以使用ASC来管理吗?

所以最后的问题是:ACS本身是否涵盖了整个身份验证和授权流程?我们还需要使用.net会员提供商吗?为了满足我们的要求,最佳做法是什么?

非常感谢您的贡献.

azure wif acs asp.net-mvc-3

5
推荐指数
2
解决办法
2561
查看次数

使用SAML承载令牌来验证用户后端服务是个坏主意吗?

假设我有一个想要从后端服务获取一些数据的前端应用程序.(我这样做.)服务需要验证最终用户是否经过身份验证,是否有权使用该服务,并可能根据用户的权限过滤返回的数据.就我而言,前端应用程序和后端服务都依赖Azure ACS进行身份验证.

简单的联合身份方案

理想情况下,前端希望代表经过身份验证的用户执行操作,这听起来非常适合使用ActAs令牌(如WS-Trust中所指定).然而,事实证明ACS目前不支持ActAs.

解决方法可能是使用实际的承载令牌(前端应用程序中的引导令牌)对后端服务进行身份验证.做起来并不难,但出于某种原因会不是一个坏主意?

authentication authorization saml claims-based-identity acs

5
推荐指数
1
解决办法
2894
查看次数

使用Azure ACS时无法从Active Directory注销

我在我的MVC 4应用程序中使用ACS 2.0.

它已配置为登录,它适用于各种提供程序,包括ADFS.我需要实现注销功能.

由于这个问题已经过时,我使用了这些示例中的代码:

这是它的样子:

    // Load Identity Configuration 
    FederationConfiguration config = FederatedAuthentication.FederationConfiguration;

    // Get wtrealm from WsFederationConfiguation Section 
    string wtrealm = config.WsFederationConfiguration.Realm;
    string wreply = wtrealm; //return url

    // Read the ACS Ws-Federation endpoint from web.Config 
    string wsFederationEndpoint = ConfigurationManager.AppSettings["ida:Issuer"];

    SignOutRequestMessage signoutRequestMessage = new SignOutRequestMessage(new Uri(wsFederationEndpoint));

    signoutRequestMessage.Parameters.Add("wreply", wreply);
    signoutRequestMessage.Parameters.Add("wtrealm", wtrealm);

    FederatedAuthentication.SessionAuthenticationModule.SignOut();

    var signoutUrl = signoutRequestMessage.WriteQueryString();
Run Code Online (Sandbox Code Playgroud)

结果,我得到了我应该重定向的注销URL,它将处理令牌并将我发送回去.URL如下所示:

https://myacsnamespace.accesscontrol.windows.net/v2/wsfederation?wa=wsignout1.0&wreply=http%3a%2f%2flocalhost%3a61192%2f&wtrealm=http%3a%2f%2flocalhost%3a61192%2f
Run Code Online (Sandbox Code Playgroud)

因此,它可以像Google,Yahoo和Microsoft帐户一样正常运行.当我退出并尝试访问受保护区域时,我会获得一个身份提供商列表,即使我选择了相同的提供商,我也必须再次登录.

但是,当我使用ADFS提供程序时,它的工作原理如下:

  • 我点击退出并进入可用提供商的页面

  • 我再次选择ADFS提供程序

  • 我用旧的AD凭据到达保护区

  • 如果我将ADFS作为唯一的提供者,则跳过上面的步骤2,并且我一直在不加入登录而无法更改用户.

当我看到会发生什么时,ACS不会处置它从ADFS获得的安全令牌,并重新使用它.

您是否有任何关于如何强制ACS处理此令牌的线索?

提前致谢!

azure single-sign-on adfs2.0 acs asp.net-mvc-4

5
推荐指数
1
解决办法
1238
查看次数

Azure访问控制服务(ACS) - ACS50001:未找到标识符为"https:// [namespace] .accesscontrol.windows.net /"的依赖方

我有一个ACS名称空间,并设置了WS-Federation身份提供程序.由于我使用的是Visual Studio 2012,因此我使用了身份和访问工具来创建依赖方.该工具使用领域并返回我在创建依赖方时提供的url值(我使用Azure云服务URL,我正在部署我的项目 - 即http://myapp.cloudapp.net).运行该工具后,我的依赖方规则组中只有一条规则 - 通过[依赖方]的所有声明.我只用一条规则测试了我的应用程序的ACS,并且在为WS-Federation身份提供者生成了所有规则之后.

无论规则组中的规则如何,我都会在问题的标题中出现错误.我的浏览器被重定向到ACS,但由于某种原因它无法找到正确的依赖方.我在两个不同的Azure帐户中创建了一个ACS命名空间,身份提供程序和依赖方,结果完全相同.

我还尝试使用http和https端点将我的项目发布到Azure云服务,并且两个端点都产生相同的结果.

WS-Federation身份提供程序的联合元数据来自Windows Azure Active Directory.

来自web.config的UPDATE FederationConfiguration部分:

<federationConfiguration>
      <cookieHandler requireSsl="false" />
      <wsFederation passiveRedirectEnabled="true" issuer="https://[MyNamespace].accesscontrol.windows.net/v2/wsfederation" realm="http://[MyApp].cloudapp.net/" requireHttps="false" />
</federationConfiguration>
Run Code Online (Sandbox Code Playgroud)

更新2:仍然没有解决方案.看起来这个问题源于我设置了自己的ACS身份提供程序,并从该身份提供程序的Windows Azure Active Directory(WAAD)下载了联合元数据.这基本上将2个ACS实例链接在一起.当我的应用程序重定向到我的ACS时,它将我的应用程序的URL作为领域传递.然后,我的ACS重定向到身份提供者WAAD,并将其自己的URL作为领域传递.这就是为什么我得到的错误具有依赖方标识符=我自己的ACS管理门户网站的url的奇怪特征.我不确定为什么它从我的应用程序到WAAD一直没有通过领域.

acs ws-federation

5
推荐指数
1
解决办法
5951
查看次数

如何通过SAML断言从ACS获取访问令牌?

我能够从ACS中配置的各种身份提供程序中检索,解码安全令牌(SWT).现在我应该 - 根据例子 - 能够做到这一点:

String headerValue = string.Format("WRAP access_token=\"{0}\"", securityToken);

WebClient client = new WebClient();
client.Headers.Add("Authorization", headerValue);

using (Stream stream = client.OpenRead(@"http://xxx.cloudapp.net/xxx.svc/users"))
using (StreamReader reader = new StreamReader(stream))
{
    String response = reader.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)

从某种意义上说,它适用于不存在的端点,例如.因此服务在那里(安全),服务器端的令牌模块和令牌验证器被调用,并且令牌通过.所以不是那样的.但无论如何问题是响应包含登录页面的HTML(其中包含身份提供者列表).看起来好像令牌验证没问题,但仍然不够安全.

我现在该怎么做才能从服务中接收我的数据?任何提示?

场景:http://tinyurl.com/WcfRestSaml

更新:我已经包含了我想要实现的场景图片的链接.

更新2:好的,我已切换到Saml2,但发生了同样的错误.然后我发现我需要断言来接收访问令牌.所以我做了:

WebClient client = new WebClient { BaseAddress = string.Format("https://{namespace}.accesscontrol.windows.net") };
NameValueCollection parameters = new NameValueCollection
{
    { "wrap_assertion_format", "SAML" },
    { "wrap_assertion", securityToken },
    { "wrap_scope", "http://{our}.cloudapp.net/" }
};

Byte[] responseBytes = client.UploadValues("WRAPv0.9", …
Run Code Online (Sandbox Code Playgroud)

wcf token saml assertion acs

5
推荐指数
1
解决办法
1166
查看次数

重定向到ACS并返回后,Cookie在极少数情况下为空

在我的网站上,有一个注册表.填写完成后,用户将被重定向到Azure ACS以便登录.登录后,用户将被重定向回我的网站并进行注册和登录.

注册表由JavaScript提交.用户填写的信息通过RegisterController中的RedirectToProvider方法保存到cookie中,用户被重定向到ACS.当用户从ACS重定向回网站时,然后通过RegisterController中的RegisterUser方法读取cookie.问题是:这在95%的时间都有效.5%的时间,当用户回来时,cookie为空.我一直无法追踪原因,我想知道是否有任何已知的问题或我可能会监督的事情.表单代码如下所示:

@using (Html.BeginForm("RedirectToProvider", "Register", FormMethod.Post, new { id = "registerForm" }))

    ... various fields...

    <input type="button" class="btn" id="registerSubmitButton" value="Register" onclick="RegisterRedirect()" />
}
Run Code Online (Sandbox Code Playgroud)

提交表单的RegisterRedirect()JavaScript(此处省略了相关的功能):

var RegisterRedirect = function () {
    $("#registerForm").valid();
    $("#registerForm").submit();
}
Run Code Online (Sandbox Code Playgroud)

RegisterController中的RedirectToProvider方法:

[AllowAnonymous]
[HttpPost]
public ActionResult RedirectToProvider(RegisterViewModel viewModel)
{
    if (ModelState.IsValid)
    {
        var providerUrl = viewModel.SelectedProviderUrl;
        viewModel.SelectedProviderUrl = "";

        var json = JsonConvert.SerializeObject(viewModel);

        try
        {
            var cookie = new HttpCookie("RegisterViewModel", json)
                {
                    Expires = DateTime.Now.AddMinutes(10)
                };
            ControllerContext.HttpContext.Response.Cookies.Add(cookie);
        }
        catch (FormatException)
        {
            return RedirectToAction("Index", "Error", new { reason …
Run Code Online (Sandbox Code Playgroud)

c# cookies azure razor acs

5
推荐指数
1
解决办法
217
查看次数

带有ACS身份验证的Azure开发中的跨域Cookie

嗨,我正在Azure上开发两个Web服务,分别是“ domain1.azurewebsite.net”和“ domain2.azurewebsite.net”。我已经在同一Active Directory下的两个服务中实施了ACS身份验证。现在,我需要通过domain1.azurewebsite.net登录并与domain2.azurewebsite.net共享cookie(包含auth令牌),以便可以访问domain1中domain2的数据服务。

我在网上遵循了建议,该建议设置了cookie domain =“。azurewebsite.net”。我希望此类Cookie被所有子域共享,即“ * .azurewebsite.net”,以便可以实现跨域用途。如下所示在web.config中完成设置

<system.identityModel.services>
 <federationConfiguration>
  <cookieHandler requireSsl="false"
                 domain=".azurewebsites.net"
                 hideFromScript="false"
                 persistentSessionLifetime="0:30:0" />
  <wsFederation passiveRedirectEnabled="true"
            issuer="https://focusns.accesscontrol.windows.net/v2/wsfederation" 
                realm="urn:Focusns" 
                requireHttps="false"
                persistentCookiesOnPassiveRedirects="true" />
 </federationConfiguration>
</system.identityModel.services>
Run Code Online (Sandbox Code Playgroud)

为了启用跨域请求,我使用了CORS,并且已经按照如下所示从“ domain2.azurewebsite.net”正确设置了响应头:

Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://domain1.azurewebsites.net
Run Code Online (Sandbox Code Playgroud)

但是,我的问题是,登录domain1.azurewebsite.net时未附加具有“ .azurewebsite.net”域的cookie。当我使用Chrome,Opera,FF时,当我检查Cookie时,甚至看不到它们。但是我确实在IE11中看到了cookie,在其中一切正常。我在链接浏览器安全手册第2部分中发现了不同浏览器之间的差异,并且我怀疑原因是IE不支持主机范围的cookie。

无论如何,有人知道我该如何解决这个问题?我需要它在Chrome,FF等环境中正常工作。

authentication cookies cross-domain azure acs

5
推荐指数
1
解决办法
1335
查看次数

MVC中的Ws-Federation身份验证在SAML2.0验证后不保留声明信息

我正在尝试使用Azure ACS添加新的auth方法来支持ADFS中的用户,但我遇到了一个非常具体的问题.

我可以使用以下配置验证SAML2.0:

var audienceRestriction = new AudienceRestriction(AudienceUriMode.Never);
var issuerRegistry = new ConfigurationBasedIssuerNameRegistry();
issuerRegistry.AddTrustedIssuer("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "https://XXXX.accesscontrol.windows.net/");
app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions
{
    MetadataAddress = "https://XXXXX.accesscontrol.windows.net/federationmetadata/2007-06/federationmetadata.xml",
    Wtrealm = "http://someurl/",
    SecurityTokenHandlers = new SecurityTokenHandlerCollection
    {
        new EncryptedSecurityTokenHandlerEx(new X509CertificateStoreTokenResolver(StoreName.My,StoreLocation.LocalMachine)),
        new SamlSecurityTokenHandlerEx
        {
            CertificateValidator = X509CertificateValidator.None,
            Configuration = new SecurityTokenHandlerConfiguration()
            {
                IssuerNameRegistry = issuerRegistry,
                AudienceRestriction = audienceRestriction
            }
        }
    },
});
Run Code Online (Sandbox Code Playgroud)

使用这样的处理程序:

public class SamlSecurityTokenHandlerEx : Saml2SecurityTokenHandler, ISecurityTokenValidator
{
    public override bool CanReadToken(string securityToken)
    {
        return base.CanReadToken(XmlReader.Create(new StringReader(securityToken)));
    }

    public ClaimsPrincipal ValidateToken(string securityToken, TokenValidationParameters validationParameters,
        out SecurityToken validatedToken) …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc acs saml-2.0 ws-federation asp.net-identity

5
推荐指数
1
解决办法
304
查看次数