カスタムBCS / .NETクラスのセキュリティの実装?
-
25-09-2019 - |
質問
私は、バックエンドシステムからデータを取得するためのカスタムBCSモデルを実装しています。それ独自のユーザー管理バックエンドの用途として、私はサービスアカウントからアクセスしています。
このすべてがうまく機能し、私は、SharePointにデータをプルすることができます。それはサービスアカウントに通されますので、しかし、誰もが悪いである、それをアクセスすることができます。
缶誰も私の方法は、実装するためにいくつかのヒントを与えて?バックエンドは、私のNT ACLを与えるものではありませんが、私は何とかちょうど「偽」彼らできたのだろうか? (基本的には良い十分です「これNTグループは、リードアクセスが持っている」と言って)ます。
私は、検索結果のためのISecurityTrimmer2の承知していますが、それは同様に外部リストに適用されるように、理想的に私は、BCSモデル内部のカバーのセキュリティにしたいです。私は、セキュアなストレージを使用し、バックエンドに個々のユーザをマッピングしないようにしたい。
解決
ガット答えここを。私はWindowsSecurityDescriptorFieldするBCSモデルにフィールドを設定することができますし、私はACLを作成するには、私のBCSの方法でカスタムコードを使用することができます:
Byte[] GetSecurityDescriptor(string domain, string username)
{
NTAccount acc = new NTAccount(domain, username);
var sid = (SecurityIdentifier)acc.Translate(typeof(SecurityIdentifier));
CommonSecurityDescriptor sd = new CommonSecurityDescriptor(false, false,
ControlFlags.None,sid,null, null, null);
sd.SetDiscretionaryAclProtection(true, false);
//Deny access to everyone
SecurityIdentifier everyone = new SecurityIdentifier(
WellKnownSidType.WorldSid, null);
sd.DiscretionaryAcl.RemoveAccess(AccessControlType.Allow, everyone,
unchecked((int)0xffffffffL), InheritanceFlags.None, PropagationFlags.None);
//Grant full access to specified user
sd.DiscretionaryAcl.AddAccess(AccessControlType.Allow, sid,
unchecked((int)0xffffffffL), InheritanceFlags.None, PropagationFlags.None);
byte[] secDes = new Byte[sd.BinaryLength];
sd.GetBinaryForm(secDes, 0);
return secDes;
}
このはうまく機能し、私はバックエンドシステムとActive Directoryの間でユーザーを翻訳した後、私はカスタムACLを作成することができます。
私はまだBCSモデルの一部としてセキュリティを持っている場合、誰かが別の方法を持っている場合は聞いて興味を持っています。
他のヒント
は、それが唯一の選択肢のように聞こえるパススルーです。キャッチは、あなたがNTLMを使用することができないということです。あなたは、外部システムへのSharePointサーバーにユーザーの資格情報を渡しているので、NTLMは、ID委任のために許可していないので、あなたは、Kerberosを使用する必要があります。そのADは、アイデンティティを委任することが許可されていることを知っているので、ID委任のためにKerberosを使用して、あなたはあなたのサービスのためのSPN(サービスプリンシパル名)を作成する必要があります。
を参照してください。のKerberos認証 SPNを作成するため、この記事でます。
私は多少異なるアプローチを使用しています。あなたのコード.NETは、外部システムからデータを取得するオブジェクトの場合は、あなたがしているもののサイトで確認することSPContextオブジェクトにアクセスすることができ、またはデータを照会しているユーザー。コードでは、あなたが好きなものをデータをフィルタリングするためにその情報を使用することができます。
SharePointサイト上の外部リストのまったく同じインスタンスが使用するAのための5つの結果が、ユーザ名またはおそらくグループのメンバーシップに基づいてユーザBのための10件の結果を返すことがありますので。実装し、実際にはかなり良い働きすることは難しいことではありません。
チェック http://jsiegmund.wordpress.com/2010/05/19/creating-secured-bcs-objects-with-bcs-meta-man/するます。