OpenAuthorizationServerProvider.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using Microsoft.Owin.Security.OAuth;
  2. using ShwasherSys.Authorization;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Globalization;
  6. using System.Linq;
  7. using System.Security.Claims;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using Abp.Domain.Repositories;
  11. using IwbZero.Authorization;
  12. using IwbZero.Session;
  13. using ShwasherSys.Authorization.Users;
  14. using ShwasherSys.CompanyInfo;
  15. namespace ShwasherSys
  16. {
  17. public class OpenAuthorizationServerProvider: OAuthAuthorizationServerProvider
  18. {
  19. public LogInManager LogInManager { get; set; }
  20. //public IRepository<WxUser> WxUserRepository { get; set; }
  21. public OpenAuthorizationServerProvider(LogInManager logInManager)//, IRepository<WxUser> wxUserRepository
  22. {
  23. LogInManager = logInManager;
  24. //WxUserRepository = wxUserRepository;
  25. }
  26. /// <summary>
  27. /// 验证 client 信息
  28. /// </summary>
  29. public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
  30. {
  31. // if (context.ClientId == null)
  32. // {
  33. // context.Validated();
  34. // }
  35. context.Validated();
  36. return Task.CompletedTask;
  37. }
  38. /// <summary>
  39. /// 生成 access_token(resource owner password credentials 授权方式)
  40. /// </summary>
  41. public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
  42. {
  43. context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
  44. // var user = context.OwinContext.Authentication.User;
  45. // var identity = new ClaimsIdentity(context.Options.AuthenticationType);
  46. // identity.AddClaim(new Claim(ClaimTypes.Name, user.Identity.Name));
  47. //获取用户传入的用户名和密码
  48. string username = context.UserName;
  49. string password = context.Password;
  50. var loginResult = await LogInManager.LoginAsync(username, password);
  51. if (loginResult.Result != AbpLoginResultType.Success)
  52. {
  53. context.SetError("invalid_grant", "用户名或密码不正确");
  54. return;
  55. }
  56. var identity = loginResult.Identity;
  57. identity.AddClaim(new Claim(IwbClaimTypes.RememberMe, "true"));
  58. identity.AddClaim(new Claim(ShwasherConsts.UserDepartmentIdClaimType, loginResult.User.DepartmentID ?? ""));
  59. var expiresUtc = DateTimeOffset.UtcNow.AddMinutes(int.Parse(
  60. System.Configuration.ConfigurationManager.AppSettings[
  61. "AuthSession.ExpireTimeInMinutes"] ?? "90"));
  62. identity.AddClaim(new Claim(IwbClaimTypes.ExpireTime, expiresUtc.ToString(CultureInfo.InvariantCulture)));
  63. // var wxUser = await WxUserRepository.FirstOrDefaultAsync(i=>i.UserName==loginResult.User.UserName);
  64. // if (wxUser != null)
  65. // {
  66. // //identity.AddClaim(new Claim(IwbClaimTypes.WxOpenId, wxUser.OpenId));
  67. // }
  68. context.Validated(loginResult.Identity);
  69. }
  70. }
  71. }