Azure AD允许匿名

时间:2014-07-31 00:22:52

标签: c# asp.net-mvc asp.net-web-api azure-active-directory

是否可以将AllowAnonymous属性与Windows Azure AD一起使用?

我需要我的网络API的一部分是匿名的,但不是真正的网站。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

Azure AD不需要支持匿名身份验证,因为您可以在WebAPI中使用AllowAnonymous属性。

我相信你想要的是对WebAPI的某些控制器进行未经身份验证的访问。有可能的。请参阅.Net示例:https://github.com/AzureADSamples/WebAPI-ManuallyValidateJwt-DotNet/blob/master/TodoListService-ManualJwt/Global.asax.cs。它验证令牌并在令牌有效时设置Thread.CurrentPrincipal,如果无法找到令牌则返回错误。

适用于您的WebAPI - 你不会在这里返回错误 - 但是当没有令牌存在时,不要设置Thread.CurrentPrincipal。 - 然后,您将使用Authorize和AllowAnonymous属性修饰控制器,以禁止或允许匿名访问。

希望这会有所帮助。

PS:投票不是我的: - )

答案 1 :(得分:0)

好的,我可以通过在身份和访问窗口中选择auth应该进入控制器来解决它。然后我添加了这段代码:

CustomAuthorize

using System.Configuration;
using System.Web;
using System.Web.Mvc;
namespace Namespace.Filters {
    public class CustomAuthorize : AuthorizeAttribute {
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) {
            string issuer = System.Configuration.ConfigurationManager.AppSettings.Get("ida:Issuer");

            // default issuer, use if loading from AppSettings fails.
            if (issuer == null) {
                issuer = "https://login.windows.net/98297c67-25a1-404d-aab3-673b6096747f/wsfed";
            }
            var reply = ConfigurationManager.AppSettings["reply"];
            reply = HttpUtility.UrlEncode(HttpUtility.UrlEncode(reply));
            var SignInRequest = string.Format(@"{0}?wa=wsignin1.0&wtrealm=https%3a%2f%2f{myapp}%2f&wctx=rm%3d0%26id%3d2fcc67c4-3671-408b-b6fe-0c2cae2763c9%26ru%3d{1}&wct=2014-07-31T01%3a21%3a16Z", issuer, reply);
            filterContext.RequestContext.HttpContext.Response.Redirect(SignInRequest);
        }
    }
}

此属性现在位于我的FilterConfig

using Namespace.Filters;
using System.Web;
using System.Web.Mvc;

namespace Namespace {
    public class FilterConfig {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
            filters.Add(new HandleErrorAttribute());
            filters.Add(new CustomAuthorize());
        }
    }
}

在我的web.config中,我在passiveRedirectEnabled="false"中添加了configuration/system.identityModel.services/federationConfiguration/wsFederation,这非常有效:)