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);
    }
}

関連記事

no image

Azure へ WordPress 環境を作成

よくあるやつだけど。 社内LT用

記事を読む

no image

Visual Studio 2017 Version15.2 にアップデート後、Xamarin.iOS でビルドエラーが発生時の回避メモ

環境 Visual Studio Enterprise 2017 Version 15.2

記事を読む

no image

UWPのScrollViewerでスクロール位置の同期を行うメモ

複数のScrollViewerのスクロール位置を同期したい場合、WPFではScrollChanged

記事を読む

初心者でも手順どおりに従うだけでロゴ画像が作れる

Webサイトを作ったので、ここを参考に ロゴ制作の練習をしました。  

記事を読む

拡張温度に対応した Windows 10 IoT Core ボード

Windows 10 IoT Core 対応ボード その2 こっちは拡張温度対応している。 Ban

記事を読む

no image

【iPhoneアプリ】背景画像を設定する

ImageResourceにBg.pngという背景画像を登録しておく 背景を設定するタイミング

記事を読む

no image

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

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

記事を読む

【.NET Framework 4.6.1】MultiLineなTextBoxでCtrl+Aが使えない問題が解決(今更)

WinForms.NETなアプリケーションの標準TextBoxで、Multiline=Trueに設定

記事を読む

SIPSorceryにて、「型 ‘log4net.ILog’ が参照されていないアセンブリで定義されています。」

ある時、SIPクライアントの開発を行っていた。 SIPクライアントライブラリの選定にあたって S

記事を読む

【ストアアプリ】タイル通知(TileUpdateManager)について

こんにちは。 ストアアプリでタイル通知を行う方法を調べました。 前回のトースト通知と

記事を読む

Message

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

PAGE TOP ↑