質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

blazor

Blazorは、マイクロソフトが開発している.NETベースのWebアプリフレームワークです。C#でフロントエンドもバックエンドも一貫して書くことが可能。クライアントサイド(WebAssembly)とサーバーサイド形式のホスティングモデルがあります。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

2回答

3828閲覧

blazorの APIについて外部アクセスを禁止したい

kaile

総合スコア3

.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

blazor

Blazorは、マイクロソフトが開発している.NETベースのWebアプリフレームワークです。C#でフロントエンドもバックエンドも一貫して書くことが可能。クライアントサイド(WebAssembly)とサーバーサイド形式のホスティングモデルがあります。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

1クリップ

投稿2021/08/27 07:53

編集2021/08/30 00:42

ヘディングのテキスト

blazorのAPIについて、外部アクセスを禁止したい

前提・実現ボールドテキストしたいこと

asp.netcoreでホストされたblazor web assemblyを使用して開発しています。ブラウザからURLで、直接APIを叩いてデータを取得できてしまいますが、これを制限したいです。razorファイルからAPIにアクセスする事は、許可してその他からはAPIにアクセスできないようにしたいです。つまり、ブラウザのURLを叩いてもAPIにアクセスできないようにしたいです。
<詳細説明>
API とは、Visual Studio でプロジェクトを作る時に[ASP.NET Core でホストされた(h)]にチェックを入れて自動生成される <プロジェクト名>.Server の Controller フォルダにある WeatherForecastController のことです。
WeatherForecastControllerは、FetchData.razorのGetFromJsonAsyncを使ってアクセスできます。
他のアクセス方法として、デバック中にブラウザでURL『https://localhost:○○/WeatherForecast』にアクセスするとデータを取得できます。
この後者のアクセス方法を、禁止したいです。
APIへのアクセスをrazorファイルからのみ許可したいです。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

Visual Studio, Core のバージョン
→Visual Studio2019, .NET5.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/08/27 08:02 編集

ASP.NET のタグをつけてください。 Visual Studio, Core のバージョンを書いてください。 Visual Studio でプロジェクトを作る時に使ったテンプレート、認証システムを書いてください。そして、あなたの言う API とはそのプロジェクトの中の何かを書いてください。
hoshi-takanori

2021/08/27 10:20

ブラウザ上で動く WebAssembly (に限らず) が持つ API キーを秘密にしたいってことなら、原理的に不可能でしょうね。暗号化してもカジュアルハッキング対策程度でしょう。
退会済みユーザー

退会済みユーザー

2021/08/27 11:17

> ブラウザ上で動く WebAssembly (に限らず) が持つ API キーを秘密にしたいってことなら、原理的に不可能でしょうね。 何の話をしてますか? あなたの言う「API キー」とは何ですか?
退会済みユーザー

退会済みユーザー

2021/08/29 00:09

質問者さん、無言ですが、回答したのでそれに対するフィードバックを書きましょう。役に立った/立たなかったぐらいはすぐ返せるはず。役に立たなかったなら、どこがダメだったかを書くと、より質問者さんが期待する答えに近いものが出てくるかも。とにかく無言で放置は NG です。
kaile

2021/08/30 00:06

説明が不足していて申し訳ありません。 Visual Studio, Core のバージョンを書いてください。 →Visual Studio2019, .NET5.0
kaile

2021/08/30 00:09

あなたの言う API とは、Visual Studio でプロジェクトを作る時に[ASP.NET Core でホストされた(h)]にチェックを入れて自動生成される <プロジェクト名>.Server の Controller フォルダにある WeatherForecastController のことだと想像してます →合っています。
kaile

2021/08/30 00:15

SurferOnWwwさん 説明不足の中、ご回答いただきありがとうございます。 SurferOnWwwさんのご回答は、ログイン状態によってAPIにアクセスを制限するというご回答だと思っています。自分が実現したいことは、ログイン状態は特に関係ないので、もう一度詳細に説明させてください。
退会済みユーザー

退会済みユーザー

2021/08/30 00:16

上の追加情報は質問欄を編集して追記してください。ここコメント欄は「質問への追記・修正」を依頼する場所ですし、初期画面では開いてないので見ない人もいますので。
退会済みユーザー

退会済みユーザー

2021/08/30 00:19

回答に対するレスはここではなく回答欄のコメントに書いてください。ただし「もう一度詳細に説明」は質問欄を編集して追記するようお願いします。
退会済みユーザー

退会済みユーザー

2021/08/30 00:20

ASP.NET のタグをつけてくださいとお願いしたのですが?
kaile

2021/08/30 00:22

<実現したいこと> WeatherForecastControllerは、FetchData.razorのGetFromJsonAsyncを使ってアクセスできます。 他のアクセス方法として、デバック中にブラウザでURL『https://localhost:○○/WeatherForecast』にアクセスするとデータを取得できます。 この後者のアクセス方法を、禁止したいです。 APIへのアクセスをrazorファイルからのみ許可したいです。
退会済みユーザー

退会済みユーザー

2021/08/30 00:24

追加情報は質問欄を編集して書くようお願いしたはずですが、見てもらってますか?
退会済みユーザー

退会済みユーザー

2021/08/30 00:36

このコメント欄の私のコメント全部見てますか? 2021/08/30 09:16, 2021/08/30 09:20 を見ているとしたら無視するのは何故?
kaile

2021/08/30 00:37

すみません!ASP.NET のタグと追加情報を質問欄に編集して追加を行いました!
退会済みユーザー

退会済みユーザー

2021/08/30 00:40

> Visual Studio2019, .NET5.0 上記の情報も追記願います。
kaile

2021/08/30 00:42

承知しました!
退会済みユーザー

退会済みユーザー

2021/08/30 01:00

> 自分が実現したいことは、ログイン状態は特に関係ないので 認証システム無しでは実現できません。詳しくは回答欄に追記したので見てください。
kaile

2021/08/30 01:49

SurferOnWwwさん ご回答ありがとうございます。 SurferOnWwwさんの方法ですと、認証されている状態だとブラウザのURLからAPIにアクセスできる状態だと思っています。認証されている状態でも、ブラウザのURLからAPIにアクセスできないようにする方法はありますか?
退会済みユーザー

退会済みユーザー

2021/08/30 01:50

回答へのコメントは回答欄の下のコメント欄に書いてください。
Zuishin

2021/08/30 02:50 編集

ブラウザのアドレスバーからのアクセスと他のアクセスをサーバー側で区別する方法はありません。
Zuishin

2021/08/30 02:57

しかしアドレスバーに何か URL を書いて送信した場合、次のイベントが発生します。 https://developer.mozilla.org/ja/docs/Web/API/WindowEventHandlers/onbeforeunload 開いているページが制御下にあるなら、ここで制限することができると思います。 全く関係ないページからのジャンプを防ぐのは不可能です。 アドレスバーからは POST できないので、メソッドが GET であった場合に拒否するという手段で API の使用を禁ずることは可能です。
kaile

2021/08/30 03:50

Zuishinさん、ありがとうございます。 全く関係ないページからのジャンプを防ぐのは不可能です。 →全く関係ないページからのジャンプを防ぎたかったのですが、不可能なんですね。 承知しました。ありがとうございました。
退会済みユーザー

退会済みユーザー

2021/08/30 08:34

質問者さん、無言になってしまいましたが、これ以上疑問・質問がなければこのスレッドはクローズしてください。まだ疑問・質問があればそれを書いてください。とにかく無言で放置は NG です。
退会済みユーザー

退会済みユーザー

2021/09/04 01:11

質問者さん、無言で放置はマナー違反です。あなたが立てたスレッドなのですからあなたが最後までフォローしてクローズしてください。
guest

回答2

0

質問のコメントに返事がないのでいろいろ不明ですが、想像を膨らませてレスしておきます。

asp.netcoreでホストされたblazor web assemblyを使用して開発しています。ブラウザからURLで、直接APIを叩いてデータを取得できてしまいますが、これを制限したいです。

あなたの言う API とは、Visual Studio でプロジェクトを作る時に[ASP.NET Core でホストされた(h)]にチェックを入れて自動生成される <プロジェクト名>.Server の Controller フォルダにある WeatherForecastController のことだと想像してます

そして、プロジェクトを作る時に[認証の種類]はデフォルトの「なし」のままにしたのではないかと想像してます。であれば、以下の画像のように[認証の種類]を「個別のアカウント」にしてプロジェクトを作ってください。

イメージ説明

そうすれば、以下の記事にあるような ASP.NET Core Identity を利用した認証システムが自動的にプロジェクトに実装されます。

ASP.NET Core Blazor WebAssembly でホストされているアプリを Identity Server でセキュリティ保護する
https://docs.microsoft.com/ja-jp/aspnet/core/blazor/security/webassembly/hosted-with-identity-server?view=aspnetcore-5.0&tabs=visual-studio

WeatherForecastController には以下の画像のように Authorize 属性が付与されるので、認証されてないユーザーはアクセス拒否されます(HTTP 401 応答になる)。

イメージ説明

なお、プロジェクトを生成した直後はユーザー情報を保持する DB は生成されてないので、DB の生成とユーザー情報の登録が必要です。その手順を書いておきます。

(1) パッケージマネージャーコンソールで Update-Database 実行

イメージ説明

(2) 生成された DB の確認(念のため)。DB の名前は appsettings.json の接続文字列参照

イメージ説明

(3) ページ右上の Register をクリックしてユーザー情報(mail と password)を登録

(4) ユーザー登録に成功すると以下のページが表示されるので赤線のリンクをクリックする

イメージ説明

(5) Login ページで上記 (3) で登録した mail と password を入力すればログインできます。

【追記】

追加情報に対するレスです。

この後者のアクセス方法を、禁止したいです。
APIへのアクセスをrazorファイルからのみ許可したいです。

認証を実装しないでということのようですが、それではできません。

<プロジェクト名>.Server の ASP.NET Web API は一般的&普通の Web サイトと同じです。

インターネットの Web サーバーに配置して公開すれば、認証システムを実装してアクセス制限をしない限り、ネットにつながっている全世界の人が無制限にアクセスできます。

イントラネットに配置してイントラネット内のクライアント以外からはアクセスできないようにしても、同じく認証システムを実装してアクセス制限をしない限り、イントラネット内のクライアントは無制限にアクセスできます。

上の回答に書いたように認証システムを実装する他ありません。

投稿2021/08/28 02:27

編集2021/08/30 00:58
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaile

2021/08/30 02:09

SurferOnWwwさん ご回答ありがとうございます。 SurferOnWwwさんの方法ですと、認証されている状態だとブラウザのURLからAPIにアクセスできる状態だと思っています。認証されている状態でも、ブラウザのURLからAPIにアクセスできないようにする方法はありますか?
退会済みユーザー

退会済みユーザー

2021/08/30 03:04

> 認証されている状態でも、ブラウザのURLからAPIにアクセスできないようにする方法はありますか? 意味が分かりません。「認証されている状態」なら、ブラウザからであろうと HttpClient からであろうと、curl からであろうと、Fiddler からであろうとアクセスできる=アクセスできないようにする方法はありません。 一体何をしたいのですか?
kaile

2021/08/30 03:41

セキュリティ観点から、認証されていてもブラウザからはアクセスできないようにしたかったです。 アクセスできないようにする方法は、ないんですね。承知しました。ありがとうございました。
Zuishin

2021/08/30 03:47

認証されててもブラウザからアクセスできないようにって。 なぜそんな方法があると思ったのかも、なんのセキュリティに寄与するのかもわからない。
退会済みユーザー

退会済みユーザー

2021/08/30 03:51

> セキュリティ観点から、認証されていてもブラウザからはアクセスできないようにしたかったです。 それも意味不明。認証されていればセキュリティ観点ではアクセスされても問題ないはず。
退会済みユーザー

退会済みユーザー

2021/08/30 08:35

質問者さん、無言になってしまいましたが、これ以上疑問・質問がなければこのスレッドはクローズしてください。まだ疑問・質問があればそれを書いてください。とにかく無言で放置は NG です。
guest

0

自己解決

解決方法がないためクローズします。

投稿2021/10/04 06:40

kaile

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問