这个问题大部分是this one的重复,但是在2013年被问到并得到回答,被接受的答案建议使用MADAM,这是自2012年以来未更新的项目,因此,我不愿意在我的解决方案中实施。
我有一个ASP.NET Web Api 2项目,该项目包括一个返回iCalendar的终结点:
[Authorize(Roles = "Staff")]
[HttpGet]
[Route("ical/{staffUsername}")]
public HttpResponseMessage GetStaffICalendar(string staffUsername)
{
string calendarString = ICalendarService.GetICalendarForStaffMember(staffUsername);
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(calendarString, System.Text.Encoding.UTF8, "text/calendar");
return response;
}
该方法在没有方法上的Authorize
属性的情况下也可以正常工作-我可以在Outlook 2016中打开并订阅日历-但我希望订阅iCalendar的用户至少属于担任“职员”角色。理想情况下,只有在URL中传递的用户名与经过身份验证的用户的用户名相匹配(即,您只能订阅自己的iCalendar)时,它才起作用,但是将授权限制为“工作人员”角色的人员就足够了。
使用Authorization
属性装饰该方法,如果我尝试将iCalendar添加到Outlook,则系统会提示我输入我的用户名和密码(好),但是无论输入的用户名是什么(仅用户名,域\用户名) ,username @ domain)身份验证始终失败(错误)。即使我从属性中删除了角色-即[Authorize]
而不是[Authorize(Roles = "Staff")]
,也会发生这种情况。
如何为可与Outlook一起使用的Web Api 2端点实施身份验证?