如何向Web Api 2服务的iCalendar(.ics)添加身份验证

时间:2020-06-10 15:54:31

标签: c# asp.net asp.net-web-api outlook icalendar

这个问题大部分是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端点实施身份验证?

0 个答案:

没有答案