2016-09-06 3 views
2

私はOWIN、クレームとASPの認証で別の記事を読んだが、私はまだ物事のヒープを理解することはできません。Owin認証とasp.netでのクレームユーザーデータにアクセスする方法

ユーザー認証がActive Directoryに基づいているイントラネットアプリケーションを開発しています。私はこの

http://tech.trailmax.info/2016/03/using-owin-and-active-directory-to-authenticate-users-in-asp-net-mvc-5-application/

に似た何かを実装しているそのアクティブディレクトリを介してユーザを認証するために完璧に取り組んでいます。しかし

var claimsIdentity = User.Identity as System.Security.Claims.ClaimsIdentity; 
var name = claimsIdentity.FindFirst(System.Security.Claims.ClaimTypes.GivenName); 

、ユーザのユーザ名:私は今、クッキー

private ClaimsIdentity CreateIdentity(UserPrincipal userPrincipal) 
    { 
     var identity = new ClaimsIdentity(MyAuthentication.ApplicationCookie, ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType); 
     identity.AddClaim(new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", "Active Directory")); 
     identity.AddClaim(new Claim(ClaimTypes.Name, userPrincipal.SamAccountName)); 
     identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, userPrincipal.SamAccountName)); 
     identity.AddClaim(new Claim(ClaimTypes.GivenName, userPrincipal.GivenName)); 
return identity; 
} 

に私は次のコードを記述する必要があり、これらの情報にアクセスするたびにユーザデータを格納するための請求を追加しましたそれ自身のアイデンティティを通して利用可能です User.Name

誰でも簡単な方法でユーザーデータにアクセスする方法をPHPでのセッションのように説明できますか?

答えて

0

拡張メソッドを使用して、必要なメソッドを提供することができます。

using System.Security.Claims; 
using System.Security.Principle.IPrinciple; 

public static class UserClaimExtentions { 

    public static string GivenName(this IPrinciple user) { 
    return user.GetClaimValue(ClaimTypes.GivenName); 
    } 

    public static string NameIdentifier(this IPrinciple user) { 
    return user.GetClaimValue(ClaimTypes.NameIdentifier); 
    } 

    public static string GetClaimValue(this IPrinciple user, string name) { 
    var claimsIdentity = user.Identity as ClaimsIdentity; 
    return claimsIdentity?.FindFirst(name)?.Value; 
    } 

    //If you aren't using the new operators from Roslyn for null checks then 
    //use this method instead 
    public static string GetClaimValue(this IPrinciple user, string name) { 
    var claimsIdentity = user.Identity as ClaimsIdentity; 
    var claim = claimsIdentity == null ? null : claimsIdentity?.FindFirst(name); 
    return claim == null ? null : claim.Value; 
    } 

} 

は今、あなたのコードでは、あなたはちょうどあなたが拡張クラスがで定義されている名前空間を使用していることを確認する必要があることができますし、その後、

var givenName = User.GivenName(); 
var identifier = User.NameIdentifier(); 

または

var givenName = User.GetClaimValue(ClaimTypes.GivenName); 
var identifier = User.GetClaimValue(ClaimTypes.NameIdentifier); 
0

を行うことができますOwinでWindows認証を使用する場合は、Startup.csクラス(cookie認証なし)から呼び出すことができます:

public void ConfigureAuth(IAppBuilder app) 
{ 
    HttpListener listener = (HttpListener)app.Properties["System.Net.HttpListener"]; 
    listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication; 
} 

次に、あなたが持っているところはどこでもあなたのOwinContextあなただけ行うことができます

var user = new OwinContext().Authentication.User; 
//or 
var user = HttpContext.Current.GetOwinContext().Authentication.User; 
関連する問題