是否可以将AllowAnonymous
属性与Windows Azure AD一起使用?
我需要我的网络API的一部分是匿名的,但不是真正的网站。
有什么想法吗?
答案 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
,这非常有效:)