带有社交登录且没有MVC依赖关系的ASP.NET WebAPI 2.2 SPA
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了带有社交登录且没有MVC依赖关系的ASP.NET WebAPI 2.2 SPA,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4387字,纯文字阅读大概需要7分钟。
内容图文
我一直在设计一个应用程序,该应用程序只是一个静态服务的客户端页面,旨在使用承载令牌通过后备API进行身份验证,但是最近我一直在尝试向后端添加社交登录选项,但发现很难找到如果可能的话,我会避免使用不使用MVC依赖项的任何示例.
这个问题对上手很有帮助:ASP.NET Web API social authentication for Web and Mobile
但是,我一直在努力使我的项目在同一庄园中工作,基本上在我提到的问题中,他已经配置了OAuthAuthorizationServerOptions.AuthorizeEndpointPath,如下所示:
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/account/externallogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
//AllowInsecureHttp = false
};
同样在他的支持api帐户控制器中,他执行以下操作:
[OverrideAuthentication]
[HostAuthentication(DefaultAuthenticationTypes.ExternalCookie)]
[AllowAnonymous]
[Route("ExternalLogin", Name = "ExternalLogin")]
public async Task<IHttpActionResult> GetExternalLogin(string provider, string error = null)
在此示例中,我无法弄清RouteAttribute(模板)的第一个参数在项目中实际引用了什么(如果有的话),有人可以解释它在这种情况下的作用吗?
现在,当运行问题中提供的示例项目时,将GET请求发送到“ api / Account / ExternalLogin”,该请求将在其API帐户控制器中的操作上进行处理,并且我认为这与OverrideAuthentication有关,但是有点超出我的理解,努力寻找该属性其他用法的有力示例.
但是,我可以肯定我已经按照他描述的方式正确配置了我的WebAPI项目,但是,当向我的OAuthAuthorizationServerOptions.AuthorizeEndpointPath发送GET请求时,它不是在我的API帐户控制器上处理的,而是由我的OAuthAuthorizationServerProvider实现处理的,它返回一个“ invalid_request’错误.
谁能想到我可能会忽略的事情,这些事情导致我的API帐户控制器操作被忽略?
我也通读了这篇文章,但似乎是用较旧版本的WebAPI编写的:
https://thompsonhomero.wordpress.com/2015/01/21/creating-a-clean-web-api-2-project-with-external-authentication-part-2/
谢谢你的帮助,
亚历克斯
解决方法:
在没有实际看到正在执行的GET请求的情况下,我只能假定它们不符合OAuth提供程序的期望.
提供者首先验证发出的请求,然后将控制权移交给端点的控制器.您的代码很可能是正确的,只是该请求的格式不正确.
我创建了一个新项目,并能够通过向AuthorizeEndpointPath发出get请求来复制您描述的问题.不幸的是,为什么没有什么可做的,但是,如果您反编译源代码或设法找到源代码,则可以看到这里发生了什么.
反编译ApplicationOAuthProvider.ValidateClientRedirectUri的调用代码,我得到:
await this.Options.Provider.ValidateClientRedirectUri(clientContext);
if (!clientContext.IsValidated)
{
LoggerExtensions.WriteVerbose(this._logger, "Unable to validate client information");
flag = await this.SendErrorRedirectAsync(clientContext, (BaseValidatingContext<OAuthAuthorizationServerOptions>) clientContext);
}
else
{
OAuthValidateAuthorizeRequestContext validatingContext = new OAuthValidateAuthorizeRequestContext(this.Context, this.Options, authorizeRequest, clientContext);
if (string.IsNullOrEmpty(authorizeRequest.ResponseType))
{
LoggerExtensions.WriteVerbose(this._logger, "Authorize endpoint request missing required response_type parameter");
validatingContext.SetError("invalid_request");
}
else if (!authorizeRequest.IsAuthorizationCodeGrantType && !authorizeRequest.IsImplicitGrantType)
{
LoggerExtensions.WriteVerbose(this._logger, "Authorize endpoint request contains unsupported response_type parameter");
validatingContext.SetError("unsupported_response_type");
}
else
await this.Options.Provider.ValidateAuthorizeRequest(validatingContext);
if (!validatingContext.IsValidated)
{
flag = await this.SendErrorRedirectAsync(clientContext, (BaseValidatingContext<OAuthAuthorizationServerOptions>) validatingContext);
}
else
{
this._clientContext = clientContext;
this._authorizeEndpointRequest = authorizeRequest;
OAuthAuthorizeEndpointContext authorizeEndpointContext = new OAuthAuthorizeEndpointContext(this.Context, this.Options, authorizeRequest);
await this.Options.Provider.AuthorizeEndpoint(authorizeEndpointContext);
flag = authorizeEndpointContext.IsRequestCompleted;
}
}
在此代码中,您可以看到,如果请求已通过验证并且未提供请求的指定ResponseType,则它将上下文的错误设置为“ invalid_request”.
我可以使用以下请求URI成功获得通过外部登录控制器方法的请求:
http://localhost:18086/api/Account/ExternalLogin?provider=none&client_id=self&redirect_uri=http://localhost:18086/&response_type=token`
附言至于控制器上的route属性,“ template”字段指定将用作模板的字符串,以匹配传入的请求URI,以确定应将请求路由到何处.
P.P.S.可以找到反编译代码段的实际源代码here
内容总结
以上是互联网集市为您收集整理的带有社交登录且没有MVC依赖关系的ASP.NET WebAPI 2.2 SPA全部内容,希望文章能够帮你解决带有社交登录且没有MVC依赖关系的ASP.NET WebAPI 2.2 SPA所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。