問題タブ [iprincipal]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net-mvc-3 - MVC3 でカスタム IPrincipal と IIdentity を使用する
以下に示すように、独自の実装を作成しIPrincipal
ます。IIdentity
また、私は を作成しHttpModule
、そのAuthenticateRequest
イベントでこれを行います:
また、私は自分自身を作成し、Controller
これらWebViewPage
が好きです:
上記のコードに示されているように、すべてが正しいようです。しかし、ご覧のとおり、場所番号 1CustomPrincipal
では!にアクセスできません。RolePrincipal
この場所では、私は の代わりに を持っていることを意味しCustomPrincipal
ます。例えばHttpContext.Current.User
は のRolePrincipal
代わりに ですCustomPrincipal
。しかし、RolePrincipal.Identity
プロパティはCustomIdentity
!
asp.net - ASP .NET でのフォーム認証を使用しない役割ベースのセキュリティ
私は利用したいと思います:
Page メソッド内で作業する場合、およびweb.configの認証セクション:
また、クラスおよびメソッド レベルでルールを適用します。
私のアプリケーションでは、... HTTP ヘッダーでユーザー ID を提供する ... カスタム メカニズムで認証します。ユーザーのPIN番号(ある種のID)+ロールを取得します。しかし、それはサイド プロットです。それは問題ではありません。
私が実際に達成したいのは、認証機能で ASP .NET ビルドを利用することですが、独自の認証メカニズムを使用することです。IPrincipalとIIdentityを実装する必要があると思いますが、そうですか? Web でたくさんのサンプルを見ましたが、それらにはすべて、プロバイダーを指定する web.config 構成と、必要ないと思われるFormsAuthenticationのようなクラスが含まれています。ユーザーオブジェクト(私が準備したもの)をリクエストに挿入するだけで済みます。
そう:
- それを達成する最も簡単な方法は何ですか?
- GenericPrincipal / IPrincipal の違いは何ですか?
IIdentity オブジェクトを取得/作成する方法は? 私はサンプルを見ました:
var id = 新しい FormsIdentity(authTicket);
しかし、私は FormsAuthentication を使用していません。
ありがとう
asp.net-mvc-3 - RoleProviderは、サーバー上のカスタムIIdentityおよびIPrincipalでは機能しません
私はカスタムを使用してIIdentity
おりIPrincipal
、ここで説明されているようにASP.NET MVC
アプリケーションで使用しています(そして受け入れられた回答の解決策に従ってください)。また、カスタムがあります。ローカル(を使用)では、正しく機能します。しかし、実際のホストにアプリケーションをアップロードすると、すべてのユーザーが役割を果たしているように見えます。たとえば、役割を持たないユーザーを作成しましたが、保護されているすべてのページ(役割が必要)にアクセスできます。たとえば、常にを返します。何かアイデアはありますか?手伝って頂けますか?やるべき設定はありますか?EF 4.3
RoleProvider
IIS Express
"admin"
"admin"
"admin"
Role.IsUserInRole
true
IIS
asp.net - Thread.CurrentPrincipal をフォーム認証プリンシパルに設定することはできません
ASP.NET MVC アプリケーション内でホストされている WCF サービスがあります ( http://msdn.microsoft.com/en-us/library/aa702682.aspxで説明されています)。MVC アクションと WCF サービス操作の一部は保護されており、両方に ASP.NET フォーム認証を使用しています。
私の WCF クライアントは、.ASPXAUTH
WCF 呼び出しのたびにフォーム認証 Cookie がサーバーに送信されるようにします。
これは長い間非常にうまく機能しました。HTTPS
現在、証明書を使用してサーバーに暗号化を追加していますSSL
。これにより、Web.config` に次の変更を加える必要がありました。
サービスがアクティブになり、クライアントはサーバー操作を呼び出すことができます。ただし、[PrincipalPermission]
保護されたサーバー操作の前にある属性により、すべてのサービス呼び出しが突然ブロックされます。私は次のことを知りました:
- HTTP の場合 ( なし
<security mode="Transport">
)、 と の両方Thread.CurrentPrincipal
がインスタンスにHttpContext.Current.User
設定され、プロパティにインスタンスが含まれます。この場合、すべてが正常に機能します。RolePrincipal
FormsIdentity
RolePrincipal.Identity
- HTTPS の場合 (
<security mode="Transport">
web.config で)、プロパティHttpContext.Current.User
は引き続きRolePrincipal/FormsIdentity
組み合わせに設定されます。しかし、プロパティThread.CurrentPrincipal
が突然WindowsPrincipal/WindowsIdentity
インスタンスに設定され、[PrincipalPermission]
属性が例外をスローします。
私は次のことを試しました:
AppDomain.CurrentDomain.SetPrincipalPolicy
をすべての可能な値 (Global.asax
の) に変更しましApplication_Start
たが、何も変わりませんでした。Thread.CurrentPrincipal
プロパティを に設定しますが、と実際のサービス呼び出しの間Application_PostAuthenticate
で、 が再びに変更されます。Application_PostAuthenticate
Thread
CurrentPrincipal
WindowsPrincipal
ヒントはありますか?私は何を間違っていますか?
c# - linqpadとカスタムIPrincipalシリアル化可能
LINQPadを使用してコードをテストしています(素晴らしい製品です、言わなければなりません)が、Thread.CurrentPrincipalを、デモのサンプルに続いてSerializableAttributeでマークされたカスタムIPrincipalに設定しようとすると、例外が発生します。問題
このコードをLINQPad(言語としてのC#プログラム)で実行すると、次の例外が発生します
Serializable属性を削除すると、すべてうまくいきます。LINQPadが使用するAppDomainアーキテクチャと、フレームワークがMyCustomPrincipalを定義するアセンブリを見つけることができないことに関連する問題のようです。また、MyCustomPrincipalを別のアセンブリに定義し、それをGACに配置することで問題が解決すると思いますが、それは私にとっての選択肢ではありません。誰かアイデアがありますか?
ありがとう、マルコ
編集:それが役立つかどうかはわかりませんが、SqlDependency.Startで同じ問題が発生しました:IPrincipalにSerializableを配置すると、フレームワークが次のタイプを定義するアセンブリが見つからないというエラーをスローしましたIPrincipal。私は不名誉なハックで解決しました:
asp.net - CustomPrincipalをグローバルに作成する方法(AuthorizeAttributeありとなし)
ASP.NETMVC4Webアプリのカスタムプリンシパル/IDがあります。また、カスタムプリンシパルをインスタンス化するためのAuthorizeAttributeを作成し、認証が必要なコントローラーのhttpContext.Userに割り当てました。
これは、AuthorizeAttributeで装飾されたコントローラー/アクションには最適ですが、認証を必要としない(ただし、認証が存在する場合は引き続き使用する)コントローラーの場合は、CustomPrincipalを取得したいと思います(できればHttpContext.Userを使用します)。 )。
これらの装飾されていないコントローラー/アクションでは、HttpContext.Userが設定されていますが、CustomPrincipalではなくGenericPrincipalが設定されています。HttpContext.Userのデフォルト設定をGenericPrincipalに「オーバーライド」するのに最適な場所はどこですか?
同様に、これが認証Cookieを持つすべてのリクエストで行われる場合、AuthorizeAttributeで装飾されたコントローラー(認証を義務付けるコントローラーになる)の場合、2回の作業を回避するにはどうすればよいでしょうか。
明確にするために、私のサイトでは匿名ユーザーによるアクセスが許可されていますが、これらのページで認証された場合(およびCustomPrincipalが実現された場合)、追加の機能が提供されます。
いくつかのオプションは次のとおりだと思います(それぞれの背後にある私のロジックは確かではありません):
- セッションを使用します(そして、プリンシパルを忘れて、ここで必要なものを作成するためのロジックを処理します)
- Application_AuthenticateRequest-これは古い学校であるというウェブ上のコメントを見た
- ベースコントローラーに設定されたカスタムフィルター
- ベースコントローラー上にAuthorizationAttributeを作成します。これにより、全員がHttpContext.Userを通過し、必要に応じて設定できます。
- IHttpModule-これは下降的な方法のようです(他の人が同意しない限り、この道を進んでください)。
考え?
asp.net-mvc - Web 層の外部で現在のプリンシパルを取得する
次の ntier アプリがあります: MVC > サービス > リポジトリ > ドメイン。フォーム認証を使用しています。現在ログインしているアプリケーションのユーザーを取得するために MVC レイヤーの外部で Thread.CurrentPrincipal を使用しても安全ですか? それとも HttpContext.Current.User を使用する必要がありますか?
私が尋ねる理由は、Thread.CurrentPrincipal の周りにいくつかの問題があるようですが、将来的に非 Web フォント エンドを提供する必要がある場合に備えて、MVC レイヤーの外側に System.Web への参照を追加するように注意しています。
アップデート
これまでに受け取ったアドバイスに従って、呼び出されるメソッドのパラメーターの一部としてユーザー名をサービスに渡しました。これにより、元の質問が改善されました。多くの Service および Domain メソッドで、ユーザーが特定のロールに属しているかどうかを確認できる必要があります。これにはいくつかの解決策があるようですが、どれが最善の方法なのか疑問に思っています。
- ユーザー名だけでなく、HttpContext.Current.User 全体をパラメーターとして渡します。
- Web 層の外で Thread.CurrentPrincipal を呼び出し、それを使用します。しかし、それが HttpContext.Current.User と等しいことを確認するにはどうすればよいでしょうか?
- これまでに提案されたようにユーザー名を渡すことに固執し、Roles.IsUserInRole を使用します。このアプローチの問題は、System.Web への参照が必要であり、MVC レイヤーの外では正しくないと感じていることです。
どのように進めることをお勧めしますか?
asp.net-mvc - MVCのActionExecutingContextHttpContext.User.Identity.IsAuthenticatedは、複数のブラウザータブにサインインするとFalseを返します
カスタムActionFilterAttributeのOnActionExecutingメソッド中に、いくつかのアクションを実行する前に、ユーザーがまだログインしていることを確認します。これを行うには、次の擬似コードと同様のことを行います。
同じドメインで実行される複数のクライアント用に複数のサイトがありますが、違いは仮想ディレクトリ名だけです。各仮想ディレクトリは実際には同じフォルダ/コードベースを指し、URL / virdir名は、ネストされた/Clientsディレクトリから使用する「クライアント構成ファイル」をコードに示します。サイト/コード/IIS構成の詳細が必要かどうかはわかりませんが、問題の原因となった場合に備えて提供してください。
ブラウザの複数のインスタンスを使用して複数のサイトにサインオンしようとすると、すべてが正常に機能します。サイト内を移動しようとすると、IsAuthenticatedチェックがtrueを返します。
ただし、複数のタブを備えた単一のブラウザを使用して複数のサイトにサインオンしようとすると、ログアウトし続けます。サイトAにサインインすると、ナビゲートできますが、サイトBにサインインするとすぐに、サイトAのどこかにナビゲートしようとすると、IsAuthenticatedはfalseを返します。
これは予想される動作ですか?これに対する回避策はありますか?
更新:IEでのみこの動作を再現できるようになりました。FirefoxとChromeでは、同じブラウザ/マルチタブまたはマルチブラウザのどちらを使用していても、ログイン画面が表示されます。IEがCookieを処理する方法に違いはありますか?それとも、クッキーが原因ではありませんか?
asp.net-mvc - MVC セッションの Azure ACS クレームの拡張
Azure でホストされる MVC 4 アプリケーションを開発しており、認証に ACS サービスを使用したいと考えています。ユーザーが認証されたら、結果のクレームの詳細を使用してローカル レコードに関連付けます。それに続いて、クレームセットを拡張して、アプリケーションが承認の決定に使用するローカル承認を表す追加のクレームを含めたいと思います。原則を置き換える必要があると思いますが、MVC でいつどこでこれを行うべきかがわからず、通常はセッションの存続期間中に使用される認証配管が壊れないようにしたいと考えています。誰でもこれに光を当てることができますか?
asp.net-mvc - Selective IPrincipal Injection via StructureMap with SignalR
StructureMap is configured to inject HttpContext.Current.User
when an IPrincipal
is requested for any ASP.NET MVC web request, like so:
But when my SignalR hub asks for a service that depends on an IPrincipal
, injection fails because HttpContext.Current
is null. Instead, SignalR already has a HubCallerContext
property that exposes the current IPrincipal
via Context.User
.
How do I configure StructureMap to always inject a valid IPrincipal
into the services my SignalR hub relies on?