Microsoft.OData.Clientでフォーム認証を行う

公開日: : Blog, Microsoft , , , , , ,

構成

  • サーバー
    ** Azure API Apps
    ** ASP.NET Web API
  • クライアント
    ** UWP
    ** Microsoft.OData.Client

ODataについては以下
UWPとAzure Web AppsでOData

サーバー

  • 作成済みのODataControllerにAuthorize属性を付与
[Authorize]
public class SecureModelsController : ODataController
{
    private ODataAPISampleContext db = new ODataAPISampleContext();

    // GET: odata/SecureModels
    [EnableQuery]
    public IQueryable<SecureModel> GetSecureModels()
    {
        return db.SecureModels;
    }

    // GET: odata/SecureModels(5)
    [EnableQuery]

  • Web.configに認証方法を宣言
<system.web>
  <!-- 省略 -->
  <authentication mode="Forms" />
</system.web>
  • 認証処理用のAPIコントローラーを新規作成(Authorizeなし)

クライアント

  • 認証処理
    CookieContainerを作成して認証処理する。
    作成したCookieContainerはODataコンテナーの作成時に使う
private CookieContainer SharedCookie = null;

/// <summary>
/// 認証ボタン
/// </summary>
private async void btnAuth_Click(object sender, RoutedEventArgs e)
{
    var info = new AuthInfo { Id = "test", Pass = "test" };
    var content = new StringContent(JsonConvert.SerializeObject(info));
    content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
    
    SharedCookie = new CookieContainer();
    var client = new HttpClient(new HttpClientHandler { CookieContainer = SharedCookie });
    
    var response = await client.PostAsync(ROOT_URL + "api/auth", content);
    var msg = new MessageDialog(response.StatusCode.ToString());
    await msg.ShowAsync();
    return;
}
  • ODataコンテナーの使用
/// <summary>
/// ODataのロード処理(要事前認証)
/// </summary>
private async void btnOData_Click(object sender, RoutedEventArgs e)
{
    //認証対応したコンテナの作成
    var context = new Container(new Uri(ROOT_URL + "odata"));
    context.SendingRequest2 += (sender2, e2) =>
    {
        var request = ((HttpWebRequestMessage)e2.RequestMessage).HttpWebRequest;
        request.CookieContainer = SharedCookie;
    };

    //レコード取得
    foreach (var record in await context.SecureModels.ExecuteAsync())
    {
        list.Items.Add(record.Name);
    }
}

関連記事

【ストアアプリ】バッジ通知(BadgeUpdateManager)について

こんにちは。 前回のタイル通知にバッジ通知を追加しました。 以下を参考に。 https

記事を読む

App Service Linux (Docker) 環境で、コンテナ内の Nginx のログをAzureポータルから確認

何も設定しない場合はSSHでアクセスしてログ参照する 通常はコンテナ内の /var/log/ngi

記事を読む

【.NET】【WPF/XAML】ローカルPDFを画面に表示する

[crayon-5ba2b833207de103017454/] [vb] Public

記事を読む

拡張メソッドは、非ジェネリック静的クラスで定義される必要があります

単純にメッセージどおり。 public static class BaseExtensi

記事を読む

UWPをHockeyApp対応させる

走り書きメモ。 UWPをHockeyApp対応させるためにはNuGetパッケージを使ってモジュール

記事を読む

no image

【UWP】矢印キーでのフォーカス移動

FocusManagerで上下左右のフォーカス遷移が出来るので、その仕組みを利用してやるビヘイビアを

記事を読む

no image

【UWP】CS1061 : ‘XXX’に’InitializeComponent’の定義が含まれておらず

いろいろなことに起因しており、引き起こされた問題であって、 根本的な原因ではない可能性はあるが、凡ミ

記事を読む

NetworkOperatorTetheringManager を使って、モバイルホットスポットをアプリケーションから構成する

UWPアプリケーションからテザリングアクセスポイントの構成を行ったメモ テザリングの Networ

記事を読む

no image

Microsoft Bot Frameworkでテキストメッセージではなく、添付ファイルを使用する

activity.Attachmentsに添付ファイル入っている。 ContentTypeで画像か判

記事を読む

no image

【VB.NET】DataGridViewで行の最大高を設定

DataGridViewにおける行の最大高さを設定するメモ 最大高さに満たない場合は内容を全て表示

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP ↑