Qui*_*orn 14 openid dotnetopenauth asp.net-mvc-4 asp.net-web-api
我正在编写一个使用MVC4的Web API,应该由多个客户端类型使用.我想使用OpenID进行身份验证.
我已经下载了DotNetOpenAuth NuGet包,但到目前为止所有示例都是针对客户端应用程序而不是API.
我的问题很简单.我想让客户端向我的API发送身份验证请求.API使用OpenID提供程序进行身份验证.然后,API会设置它需要的任何内容,以便在整个Web api调用中使用[Authorize]标记.
我知道在.NET应用程序中,可以调用FormsAuthentication.SetCookie,但这对于其他语言来说也是一个易于实现的解决方案吗?
问题简而言之.如何将OpenID集成到MVC4 web api中,以允许使用可由多种语言调用和使用的Authorize标记?
And*_*ott 24
您可能会混淆身份验证和授权的角色.听起来您的Web API需要两者.
让我们从授权开始吧.每个API(即由浏览器以外的客户端应用程序访问的Web URL)允许匿名访问或必须经过授权(即授权).授权是OAuth的域名.OAuth(大概是v2)描述了客户端如何授权对WebAPI的调用.
大概是作为授权过程的一部分,用户登录到您的服务.登录用户的此步骤是身份验证.它与授权正交.无论您是通过OpenID,用户名/密码,X.509证书等对用户进行身份验证,都应与您的WebAPI呼叫授权方式无关.换句话说,您的WebAPI方法不应该关心用户如何进行身份验证(读取:没有OpenID可以绑定任何内容).他们将拥有一个授权过滤器,用于验证传入请求的授权并将其转换为几条信息,包括授权访问的帐户的用户名,访问级别,授权的ID客户等
所以一步一步,整个场景可能会是这样的:
Controller.User是null(或者User.Identity.IsAuthenticated是false).有关如何实现此端点的信息,请参阅OAuthAuthorizationServer示例.redirectUrl查询字符串中的参数,该参数保留完整的传入OAuth 2授权请求URL.redirectUrl参数中的URL .有关如何执行此操作,请参阅OpenIdRelyingPartyMvc示例.AuthorizationServer以创建授权记录并将响应返回给客户端.此调用的结果之一是为客户端提供重定向响应,为其提供授权代码.WebServerClient该类来交换访问令牌的授权代码(通常也是刷新令牌). 这就是整个故事.是的,无论他们碰巧使用哪种语言或库,客户端角色都很容易编写.
顺便说一句,我所指的DotNetOpenAuth样本不是通过NuGet分发的.您从SourceForge获取样本.