IdentityServer4 ASP.NET核心API Angular:登录/身份验证
我正在使用IdentityServer4来处理我的ASP.NET核心API中的身份验证和授权.我在客户端使用angular4.
我知道我可以使用tokenode = ResourceOwnerPassword来使用令牌端点( http://myapidomain/connect/token)来获取access_token.这意味着我在登录UI中提供用户名和密码进行身份验证. 我的问题是:我们是否需要实施API帐户/登录?我认为IdentityServer4已经通过cookie身份验证中间件自动处理登录. await HttpContext.Authentication.SignInAsync(identityUser.Id,identityUser.UserName); 这用于注销 await HttpContext.Authentication.SignOutAsync 我的第二个问题是: 在角客户端 authFormHeaders() { const header = new Headers(); header.append('Content-Type','application/x-www-form-urlencoded; charset=utf-8'); header.append('Accept','application/json'); header.append('Authorization','Bearer ' + this.oidcSecurityCommon.getAccessToken()); return header; } getUserInfo() { let self = this; let options = new RequestOptions({ method: RequestMethod.Get,headers: this.authService.authFormHeaders() }); return self.http.get(this.authWellKnownEndpoints.userinfoEndpoint,options) .map((res: Response) => { return res.json(); }) .catch(self.appService.handleError); } 在我的API服务器端: CorsPolicyBuilder corsBuilder = new CorsPolicyBuilder() .AllowAnyHeader() .AllowAnyMethod() .AllowAnyOrigin() .AllowCredentials(); services.AddCors(opts => { opts.AddPolicy("AllowAllOrigins",corsBuilder.Build()); }); var url = optionsAccessor.Value.SystemConfig.Authority; app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions { Authority = url,RequireHttpsMetadata = false,ApiName = "netpower.qms.saas.api"/*,AllowedScopes = { IdentityServerConstants.StandardScopes.OpenId }*/ }); app.UseCors("AllowAllOrigins"); 解决方法
对于Angular客户端,您应该使用grantype
Implicit而不是
ResourceOwnerPassword.资源所有者密码凭据授予类型适用于资源所有者与客户端具有信任关系的情况,例如设备操作系统或高权限应用程序.
授权服务器在启用此授权类型时应特别小心,并且仅在其他流不可行时才允许(来自OAuth Spec)
有关使用Implicit的实现,您可以参考this,有关使用ResourceOwnerpassword,请参阅this. 资源类型的流程如下 +----------+ | Resource | | Owner | | | +----------+ v | Resource Owner (A) Password Credentials | v +---------+ +---------------+ | |>--(B)---- Resource Owner ------->| | | | Password Credentials | Authorization | | Client | | Server | | |<--(C)---- Access Token ---------<| | | | (w/ Optional Refresh Token) | | +---------+ +---------------+ 对于具有Angular和Identity Server 4的ResourceOwnerPassword类型,您可以参考this GitHub repo,其中还包含一些客户端和服务器端的示例代码 步骤如下 >资源所有者为客户端提供其用户名和 我们是否需要实施API帐户/登录? 不,你不必实现.如你所怀疑,这是在授权服务器中完成的.您将向Identity Server 4身份验证服务器发送用户名和密码,它将为您提供Bearer令牌.您的中间件(应用程序. UseIdentityServerAuthentication)将验证您的应用程序的请求. 我尝试通过访问http://myapidomain/connect/userinfo获取userinfo.但我总是得到405错误代码.我失踪了什么 您可以查看身份服务器日志以找出缺少的内容.我捕获了一个示例请求,它看起来像这样 POST http://myapidomain/connect/token HTTP/1.1 Host: myapidomain Proxy-Connection: keep-alive Content-Length: 142 Pragma: no-cache Cache-Control: no-cache Accept: application/json,text/plain,*/* Origin: http://angularspawebapi.azurewebsites.net User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/57.0.2987.110 Safari/537.36 Content-Type: application/x-www-form-urlencoded client_id=AngularSPA&grant_type=password&username=admin%40gmail.com&password=Admin01*&scope=WebAPI%20offline_access%20openid%20profile%20roles GET http://myapidomain/connect/userinfo HTTP/1.1 Host: myapidomain Proxy-Connection: keep-alive Pragma: no-cache Cache-Control: no-cache Accept: application/json,*/* User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/57.0.2987.110 Safari/537.36 Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjhDRTQ1ODAwQTAwNkExNkZGMzEwOTExMDVCRjNDNTY2MzgzNEUxQkEiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJqT1JZQUtBR29XX3pFSkVRV19QRlpqZzA0Ym8ifQ.eyJuYmYiOjE1MDAwOTk4NjIsImV4cCI6MTUwMDEwMDc2MiwiaXNzIjoiaHR0cDovL2FuZ3VsYXJzcGF3ZWJhcGkuYXp1cmV3ZWJzaXRlcy5uZXQiLCJhdWQiOlsiaHR0cDovL2FuZ3VsYXJzcGF3ZWJhcGkuYXp1cmV3ZWJzaXRlcy5uZXQvcmVzb3VyY2VzIiwiV2ViQVBJIl0sImNsaWVudF9pZCI6IkFuZ3VsYXJTUEEiLCJzdWIiOiI5Y2I1ZGViNS1iZWRmLTRkMWItOThkNS05ZTFjYTgwNzVhYjAiLCJhdXRoX3RpbWUiOjE1MDAwOTk4NjEsImlkcCI6ImxvY2FsIiwicm9sZSI6ImFkbWluaXN0cmF0b3IiLCJzY29wZSI6WyJvcGVuaWQiLCJwcm9maWxlIiwicm9sZXMiLCJXZWJBUEkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsicHdkIl19.CZAGtK5hvwgkMvX9NQ-8zTFr8Cv3SRVhM-u1WdqdLwI-qbdknfhhVFFHFpPzEWEJnKhsi3aE_BOb_UtRiDBWNHzlXAGmKSjtd70HOlT3dR9Sj_v09Ld15On3HihgfeDwOzIt10ZYwwjRr1tRCf6Ro41FQ2UrzBYcSFe47md7DSlxPXbjnQAHdu8gHMITFF8Nqx0V9OEw21fofRdBalOpvxf1IBhsJwWLyL4bLFYya8jNispK4MnN_tdaS8kxIMZ8iC_IUlhY4XEj5pkDBA9r8ad_Vn5WavO3Lmr4Tew4uBhlFhbE-Qr6EpErAEBVHVtJYs70XXGJJ7QQLoFNmO5M9w content-type: text/plain (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 如何从另一个程序集中提供内容
- asp.net – Azure服务结构:IReliableQueue
- 在ASP.NET中,获取基本UR1请求的最快方法是什么?
- C#如何创建泛型类T的实例
- asp.net-mvc – 如何启用创建,同时还禁用Kendo Grid的编辑
- asp.net-mvc-3 – MVC:路由获取/发布到不同的控制器 怎么样
- asp.net-mvc – 未找到部分视图“First.cshtml”或视图引擎
- asp.net-mvc – Upshot.js的当前状态
- asp.net-mvc – ASP.NET MVC 4覆盖发出的html名称和id
- asp.net – User.Identity.GetUserId()方法无法在Web Api 2
- asp.net – 当前上下文中不存在名称“GridView1”
- asp.net-mvc – 如何在响应重定向MVC后保留Serve
- asp.net-mvc – 变化:*错误地添加到http标头响应
- asp.net-mvc – Ajax.BeginForm和验证
- asp.net-mvc – 在布局视图中获取当前的Applicat
- ASP.Net vnext api在localhost上工作,在azure上返
- asp.net-mvc – 如何在MVC 4.0 Razor中进行授权
- asp.net – 导致创建新会话的静态文件
- asp.net – 将WebGrease升级到版本1.3.0仅在生产
- 如何在Azure中部署和托管.NET Core自托管控制台应