短いバージョン: .NET Core MVC Webサイトで正しい認証構成をマージして、ユーザーがAzure Active Directoryに対して認証できるようにするだけでなく、(コンソールアプリからの)デーモン接続も許可するのに問題があります。
長いバージョン: Startup.csのConfigureServicesメソッドで次を使用すると、Azure ActiveDirectoryに対して完全に正常に認証される.NETCore MVCWebサイトがあります。
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddSignIn("AzureAd", Configuration, options => Configuration.Bind("AzureAd", options));
また、.NET CoreコンソールアプリでAPIを(デーモン接続として)上記のMVC Webサイトに呼び出そうとしています(すべては、Microsoft Azureアカウントの[アプリの登録]セクションで構成されています)。コンソールアプリをMVCWebサイトに接続すると、コントローラーでアクション結果が正常にヒットしますが、WebサイトのStartup.csのConfigureServicesメソッドで以下を使用している場合に限ります。
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddProtectedWebApi("AzureAd", Configuration, options => Configuration.Bind("AzureAD", options));

基本的に、OpenIdConnectオプションのみを使用すると、WebユーザーはWebサイトにアクセスできますが、コンソールアプリは拒否されます。JwtBearerオプションのみを使用すると、コンソールアプリは接続できますが、Webユーザーは拒否されます。
私は一日中Google-Bingを使用していて、これら2つの構成のマッシュアップを他の構成をノックアウトせずに機能させるのに苦労しています。
.AddJwtBearer()メソッドを使用しようとしましたが、完全に混乱しています。
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddSignIn("AzureAd", Configuration, options => Configuration.Bind("AzureAd", options))
.AddJwtBearer(options => Configuration.Bind("AzureAD", options));
これらはどのように連携して機能しますか?両方を配置でき、Webアプリはブラウザーを介して機能し、コンソールアプリ(デーモン)も機能しますか?両方をappsettings.jsonファイルにバインドできますか?
ちなみに、appsettings.jsonファイルは次のようになります。
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "zzzzzzzzzzzzzz.onmicrosoft.com",
"TenantId": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy",
"ClientId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"CallbackPath": "/signin-oidc",
"SignedOutCallbackPath ": "/signout-callback-oidc",
"ClientSecret": "myAzureClientSecret"
}
}
更新2020-06-15: AGESでこれをオン/オフして作業した結果、適切な解決策が見つかりました。そのため、@ michael-shterenbergに報奨金を授与します。また、@ gary-archerと彼の印象的なブログサイトから学ぶことがたくさんあることもわかりました。私はたまたまマイケルの意見から成功を収めました。
上の図のASP.NETCore MVCWebアプリ内のStartup.csファイルのmodは次のとおりです。
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddSignIn("AzureAd", Configuration, options =>
Configuration.Bind("AzureAd", options))
.AddJwtBearer(o =>
{
o.Authority = "https://login.microsoftonline.com/common";
o.TokenValidationParameters.ValidateAudience = false;
o.TokenValidationParameters.ValidateIssuer = false;
});
services.AddAuthorization(options =>
{
options.AddPolicy("UserAndApp", builder =>
{
builder.AuthenticationSchemes.Add(JwtBearerDefaults.AuthenticationScheme);
builder.AuthenticationSchemes.Add(OpenIdConnectDefaults.AuthenticationScheme);
builder.RequireAuthenticatedUser();
});
});
...デーモンアプリから呼び出そうとしているコントローラーで次の属性を使用することと相まって。
[Authorize("UserAndApp")]
ユーザーは引き続きAzureActive Directoryプロセスを使用してWebサイトにログインでき、自動化されたプロセスでもログインできるようになりました。
これらすべてのAzureApp Registration側がどのように機能するかを理解するのに苦労している人がいる場合は、次の非常に説明的なブログ投稿を試してください。
BearerAuthenticationを使用して.NETCoreAPIを保護します
(以前、Azureアプリの登録プロセスがどのように機能するかを頭に入れようとしていたときにそれを見ていたらよかったのにと思います!)
これが私のために働いた解決策です(ASP .NET Core 2.1および3.1でテスト済み)
AddAuthenticationはパラメータなしである必要があります。services.AddAuthentication()
.AddAzureAD(options => Configuration.Bind("AzureAd", options))
.AddJwtBearer(o=> {
o.Authority = "https://login.microsoftonline.com/common";
o.TokenValidationParameters.ValidateAudience = false;
o.TokenValidationParameters.ValidateIssuer = false;
});
私は使用しましたがAddAzureAd、使用していませんAddSignIn(それはあなたが使用しているカスタム外部ライブラリですか?)
services.AddAuthorization(options =>
{
options.AddPolicy("UserAndApp", builer =>
{
builer.AuthenticationSchemes.Add(JwtBearerDefaults.AuthenticationScheme);
builer.AuthenticationSchemes.Add(AzureADDefaults.AuthenticationScheme);
builer.RequireAuthenticatedUser();
});
});
[Authorize("UserAndApp")]
public class HomeController : Controller
力学に関するいくつかの説明:
自動認証スキームを設定する必要はありません。これは、2つの異なるタイプがある一方で、認証ミドルウェアで実行されるデフォルトのスキーマになるためです。
ポリシーは両方の認証ハンドラーを実行しようとします。一方が成功した場合、認証は成功しました。
注:無効なベアラートークンを使用してリクエストを送信すると、両方の認証ハンドラーが失敗します。この場合、AzureADDefaults実際にチャレンジメソッドを実装し、リダイレクトするため(ステータスコード302)、「勝ち」ます。これを必ず処理してください。あなたのアプリで
アーキテクチャが完全に正しくないように感じます。Webバックエンドによって実行される2つの役割を分離する必要があります。
現在のWebのみのアーキテクチャ
マルチクライアントアーキテクチャ
Webバックエンドを更新して、CookieではなくOAuth2.0アクセストークンで保護されているAPIエントリポイントを含める必要があります。これで、コンソールアプリはWebバックエンドを呼び出すことができるようになります。
.NET CORE SUB PATHS
Webバックエンドに追加の/ apiサブパスを導入します。UseWhenの機能を使用すると、他のウェブバックエンドの動作に影響を与えることなく、これを行うことができます:
/*
* Apply API behaviour to only subpaths, without impacting the rest of the app
*/
app.UseWhen(
ctx => ctx.Request.Path.StartsWithSegments(new PathString("/api")),
api => {
api.useAuthentication();
api.useJwtBearer();
});
.NET COREAPIの例
サブパスを使用する例については、サンプルの.Net CoreAPIを参照してください。起動クラスは、 ASP.Netのミドルウェアが異なるサブパスのための異なるauthenticaitonの取り扱いに配線されているところです。
将来の可能性
上記の論理的な分離ができたら、将来的にはさらに進化させることができます。たとえば、完全にCookieのないモデルになります。
私のブログ https://authguidance.com このアプローチに従い、私のサンプルAPIはすべてあらゆるタイプのクライアントをサポートします。
ジャナ・ダガーは愛を探していることをオープンに語った。このテーマと結婚までの5年間の期間について彼女が言ったことをすべて紹介する。
『アウトランダー』のサム・ヒューアンは最近、自分をスターにした役柄であるジェイミー・フレイザーを偲ぶために、撮影現場から何を取り入れるかを明らかにした。
「She Loves You」は 1 時間で書かれ、1 日で録音され、ビートルズの曲のキャリアの中で最高のパフォーマンスの 1 つでした。
ドリー・パートンと祖母ベッシーには特別な関係がありました。パートンおばあちゃんは重篤でしたが、それでもドリーはいたずらをやめられませんでした。
交雑種とも呼ばれる雑種動物は、2 つの異なる種または密接に関連した種の子孫です。生息地の違いにより、飼育下でのみ存在するものもあります。
Eyes of Wakanda は MCU に直接関連しており、さらに X-Men '97、What If...、Daredevil などの最新情報も掲載されています。
マイケル・C・ホールは、2016年に妻のモーガン・マクレガーと結婚しています。マイケル・C・ホールの妻について知っておくべきことはすべてここにあります。
ジェイソン・モモアが、ニコール・キッドマンとともにアトランナ女王役で『アクアマンと失われた王国』の最初のティーザー予告編に登場
頻繁に起こることだが、突然、私は衝撃を受ける 再びミッドウェイだ <いいえ、太平洋にあるものではなく、カーニバルにあるものです> どの見出しも大音量で…..
2022 年には GPT-3 がリリースされるため、ライティング スキルの重要性は低くなるようです。AI を使えば、文章が苦手な人でも質の高い人材を生み出すことができます。
今日のペースが速く競争の激しい世界では、個人の成長、経済的安定、そして人生全体の満足度において、個人のキャリアが重要な役割を果たしています。しかし、多くの人は停滞と不満の絶え間ないサイクルに陥っており、職業生活が徐々に消耗していきます。
先週、私はPressGazette(英国のメディアニュースウェブサイト)経由で送信されたプレスリリースに気づきました。この記事は、スカンジナビアのポッドキャスト ホスティングおよび広告会社である Acast が、ポッドキャスティングにおいて「おそらく最も影響力のある」パブリッシャーのコンソーシアムを率いることになると発表しました。