あなたはActive Directoryで認証されることを前提としています。その場合、PrincipalContextおよびOWINミドルウェアを使用できます。
GitHubでAspNetMvcActiveDirectoryOwinというサンプルプロジェクトを作成しました。それをフォークして実行することができます。 これはもともとASP.Net MVC用に書かれていますが、ASP.Net Web APIでも同じビジネスロジックを使用できます。
次の手順を実行する必要があります。まず、Active Directoryで認証する必要があります。
注:他のタイプの認証方法を使用する場合は、このクラスのロジックを変更する必要があります。
public class ActiveDirectoryService : IActiveDirectoryService
{
public bool ValidateCredentials(string domain, string userName, string password)
{
using (var context = new PrincipalContext(ContextType.Domain, domain))
{
return context.ValidateCredentials(userName, password);
}
}
public User GetUser(string domain, string userName)
{
User result = null;
using (var context = new PrincipalContext(ContextType.Domain, domain))
{
var user = UserPrincipal.FindByIdentity(context, userName);
if (user != null)
{
result = new User
{
UserName = userName,
FirstName = user.GivenName,
LastName = user.Surname
};
}
}
return result;
}
}
第二に、あなたはOwinミドルウェアで使用されるクレームを作成したいです。
public class OwinAuthenticationService : IAuthenticationService
{
private readonly HttpContextBase _context;
private const string AuthenticationType = "ApplicationCookie";
public OwinAuthenticationService(HttpContextBase context)
{
_context = context;
}
public void SignIn(User user)
{
IList<Claim> claims = new List<Claim>
{
new Claim(ClaimTypes.Name, user.UserName),
new Claim(ClaimTypes.GivenName, user.FirstName),
new Claim(ClaimTypes.Surname, user.LastName),
};
ClaimsIdentity identity = new ClaimsIdentity(claims, AuthenticationType);
IOwinContext context = _context.Request.GetOwinContext();
IAuthenticationManager authenticationManager = context.Authentication;
authenticationManager.SignIn(identity);
}
public void SignOut()
{
IOwinContext context = _context.Request.GetOwinContext();
IAuthenticationManager authenticationManager = context.Authentication;
authenticationManager.SignOut(AuthenticationType);
}
}
出典
2017-02-23 21:05:18
Win
このASP.Net WebフォームまたはASP.Net MVCですか? Active Directoryを使用していますか? – Win
私はWeb APIを使用する予定でしたか?明らかにIWAだけが認証に使用していますか? –