概述IdentityServer4是为ASP.NETCore2.系列量身打造的基于OpenIDConnect和OAuth2.0的认证框架。在你的应用中部署identityserver,通过以下特性,你可以对你的应用(如网站、本地应用、移动端、服务)做集中的登录逻辑和工作流控制。IdentityServer完全实现了OpenIDConnect协议标准。对各种类型的应用程序实现单点登录和注销。为各种客户端颁发访问令牌,例如服务到服务通信、网站应用、SPAS和本地应用或移动应用等。OAuth2.0默认有四种授权模式(GrantType):授权码模式(authorization_code)、简化模式(implicit),密码模式(password),客户端模式(client_credentials)我们一般的项目访问API的时候,大部分都是根据账号密码来访问接口的。比如app端的用户。下面来看看密码模式(password)是如何实现的。主要实现方式1、在认证项目中,创建ProfileServicepublicclassProfileService:IProfileService{publicasyncTaskGetProfileDataAsync(ProfileDataRequestContextcontext){varclaims=context.Subject.Claims.ToList();context.IssuedClaims=claims.ToList();}publicasyncTaskIsActiveAsync(IsActiveContextcontext){context.IsActive=true;}}2.创建ResourceOwnerPasswordValidator,用于账号密码认证UserName=="conan"&&context.Password=="123"){context.Result=newGrantValidationResult(subject:context.UserName,authenticationMethod:"custom",claims:newClaim[]{newClaim("Name",context.UserName),newClaim("UserId","111"),newClaim("RealName","conan"),newClaim("Email","373197550@qq.com")});}else{//认证失败败context.Result=newGrantValidationResult(TokenRequestErrors.InvalidGrant,"invalidcustomcredential");}}}3、调整AllowedGrantTypes和AllowedScopesclient.AllowedGrantTypes=GrantTypes.ResourceOwnerPassword;List
