将未经授权的请求重定向到Azure AD以进行登录

时间:2016-06-12 12:57:01

标签: asp.net-web-api2 azure-active-directory

我在Azure中运行了一个使用Azure AD保护的WebAPI实例。移动应用使用承载令牌连接到此API,效果很好。但是,当我尝试从浏览器调用API时,它返回401,因为我没有登录。这是真的,因为我没有出现登录屏幕。

我的API没有任何UI,所以我希望它做的是将用户转发到Azure AD登录并返回到身份验证后调用的API端点。

如果我转到Azure门户网站,则会显示“请求未获得授权时要采取的操作”设置。如果我将其设置为“使用Azure Active Directory登录”,它的行为方式与我想要的一样。但是......我有一些需要匿名访问的端点,此设置捕获所有请求,而不关心任何[AllowAnonymous]属性。

因此,对标记为“授权”但未授权的端点的任何请求都应转发到Azure AD登录,其他所有请求都应被允许。

1 个答案:

答案 0 :(得分:1)

DelegatingHandler添加到您的web api项目并在WebApiConfig.cs中注册:

config.MessageHandlers.Add(new UnAuthorizedDelegatehandler());

public class UnAuthorizedDelegatehandler: DelegatingHandler

在那里,您可以检查401状态代码并重定向到任何内容,并将重定向网址应用为查询字符串参数。

HttpResponseMessage rm = await base.SendAsync(request, cancellationToken);
if (rm.StatusCode == HttpStatusCode.Unauthorized)
{
    // configure the redirect here
    return rm;                        
}