0

皆さん、これがこれに適したフォーラムかどうかはわかりませんが、私はこれを理解しようとして頭がいっぱいです。

だから私がやろうとしていることの簡単な背景。私は大学の上級プロジェクトに取り組んでおり、実際には Microsoft と連携していますが、Web フォーム アプリケーションは完了しています。ロール ベースの ID を使用して ACS をセットアップしようとしています。私は VS 2012 を使用しており、Windows Live ID と Google ログインを使用して ACS が正しく動作するようになりました。アプリ全体を管理者であるユーザーのみに制限しようとすると、問題が発生します。私はオンラインで多くのチュートリアルを見てきましたが、それらはすべて 2012 年とは大きく異なる VS 2010 にあるようです。私の問題は特に、Windows ライブ ID が役割を作成するために私に与える nameidentifier を表示できないという事実にあります。それは紺碧です。たとえば、someone@live.com がログインした場合、nameidentifier= "x" を取得し、その nameidentifier からロールを作成できます。できます'

これをvs 12で機能させる方法やチュートリアルを持っている人はいますか? または、私が説明していることを別の方法で行う方法を誰かが知っていれば、それを大いに感謝します!

どんな助けでも大歓迎です!

また、@AntonStaykov からの多くの作業を見てきましたが、私が探しているものとはまったく異なります。支援するためにここにいる場合は、本当に感謝しています。

4

3 に答える 3

2

コードで nameidentifier クレームにアクセスする方法を次に示します。これは、デフォルトで提供されるパススルー クレームを使用して ACS がセットアップされていることを前提としています。

        ClaimsPrincipal p = System.Threading.Thread.CurrentPrincipal as ClaimsPrincipal;

        Claim cNameIdentifier = p.Claims.First(c => c.Type == ClaimTypes.NameIdentifier);
        if (cNameIdentifier != null)
        {
            string NameIdentifierValue = cNameIdentifier.Value;

            // your code here to implement your logic.

        }

あなたが求めているのは、ロールベースのセキュリティを実行できるように、Web アプリケーションで着信クレームを拡張 (または変換) する方法だと思います。たとえば、トークンがサイトにヒットしたときに、

  1. 着信 NameIdentifier クレームを取得し、
  2. ストア (辞書、永続ストア、プロバイダーなど) を検索して、独自のロジックに基づいてユーザーが管理者であるかどうかを確認します。
  3. "Admin" を値としてプリンシパルにロール クレームを追加します。

これがあなたの目標ですか?その場合、これを行う場所は ClaimsAuthenticationManager です。

http://msdn.microsoft.com/en-us/library/system.security.claims.claimsauthenticationmanager.aspx

-リック

于 2013-03-13T05:03:57.757 に答える
0

.NET Framework 4.5を対象としている場合、ツールはVS2012では実際に異なります。その多くは、WindowsIdentityFoundationが4.5のフレームワークに組み込まれているという事実によって推進されています。したがって、.NET Framework 4.0をターゲットにするだけで、摩擦の一部を取り除くことができます。これにより、参照しているチュートリアルと同様のエクスペリエンスが得られます(これらのチュートリアルが.NET 4.0以前を対象としていると仮定します)。

名前識別子を表示できない理由がわかりません。たぶん、あなたはその質問の周りにもう少しコンテキストを提供することができますか?たとえば、ACSポータル、コードなどにいますか?

-リック

于 2013-03-13T02:21:20.113 に答える