c# - OWIN - 自定义 UserManager

标签 c# asp.net-mvc owin

我必须自定义 UserManager 类以在公司结构中查找和验证用户(将 Active Directory 身份验证与另一个 Oracle 身份验证混合)。虽然我已经实现了 FindAsyncCreateIdentityAsync,但用户未设置为经过身份验证。

我的 UserManager 实现:

using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Security.Claims;
using System.Web;
using MyProject.Common;
using MyProject.Models;
using Microsoft.AspNet.Identity;
using System.Threading.Tasks;

namespace MyProject.Infrastructure
{
    public class GNUserManager : UserManager<ApplicationUser>
    {
        public GNUserManager(IUserStore<ApplicationUser> store) : base(store)
        {

        }        

        public override async Task<ApplicationUser> FindAsync(string userName, string password)
        {
            /* Performs some logic here that returns true */

            if (foundUser) {
                return await Task.Run(() => new ApplicationUser
                {
                    UserName = userName, 
                    Id = userName
                });
            }

            throw new Exception("User not found.");
        }

        public override async Task<ClaimsIdentity> CreateIdentityAsync(ApplicationUser user, string authenticationType)
        {
            IList<Claim> claimCollection = new List<Claim>
            {
                new Claim(ClaimTypes.Name, user.UserName),
                new Claim(ClaimTypes.Country, "Brazil"),
                new Claim(ClaimTypes.Email, user.UserName)
            };

            var claimsIdentity = new ClaimsIdentity(claimCollection, "Company Portal");

            return await Task.Run(() => claimsIdentity);  
        }
    }
}

我的用户身份验证还缺少什么?

最佳答案

尝试更改此行。

 var claimsIdentity = new ClaimsIdentity(claimCollection, "Company Portal");

为此

var claimsIdentity = new ClaimsIdentity(claimCollection, DefaultAuthenticationTypes.ApplicationCookie);

这应该会为您生成所需的 cookie。

关于c# - OWIN - 自定义 UserManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21785703/

相关文章:

c# - 如何在 C# 中为事件中心创建接收器以获取给定时间跨度的消息?

c# - 从共享点下载文件

c# - 比较 2 个 Dictionary<string, string> 实例

c# - 这是一个很好的 UnitOfWork 和围绕 DDD 的存储库模式设计吗

c# - 如何在运行时使用 List<T> 上的 EditorFor() 更改 View

javascript - jquery Validate Plugin OnClick 函数中的部分表单验证

c# - 在 C# 中识别自己的进程名称

asp.net - 在MVC5中,如何保证cookie中包含的用户仍然存在或者密码与上次登录没有变化?

asp.net-web-api - 创建自托管 Web API 还是使用 Asp.Net Core Web API?

asp.net - 在自托管 Web 应用程序中使用性能计数器