Wpis z mikrobloga

#programowanie #pytanie #mvc #android #dotnet #csharp #aspnetmvc #ajax

Chciałbym poprosić Was o poradę odnośnie architektury, którą chcę zastosować w mojej aplikacji.

Główne elementy

- Aplikacja webowa (MVC) ASP.NET

- Klient na Androida

- później być może inni klienci (iOS, WP)

Wszystko zbudowane w oparciu o Web serwis wykonany Web API (2), który będzie udostępniał pełną funkcjonalność aplikacji web i klientom mobilnym:

- zakładanie kont

- logowanie

- przeglądanie, dodawanie danych przez zalogowanych użytkowników

Powiedzmy, że po zalogowaniu usera wygeneruje i zwrócę klientowi jakiś identyfikator sesji/token.

Web API powinno otrzymywać ten token każdorazowo kiedy wykonywana jest jakaś akcja kontrolera.

Strona internetowa może sobie trzymać ten token w sesji.

Android może sobie trzymać token nawet w jakiejś zmiennej.

Chyba muszę ten token przekazywać w do API w dodatkowym headerze HTTP?

Bo przecież w aplikacji Androidowej nie będę miał ciasteczek?

Z androida chyba nie będzie problemu.

A jak załączać ten header np. w requestach AJAX ze strony?

Gdzie wtedy trzymać ten klucz po stronie przeglądarki skoro ajax musi go znać żeby odpytać web api?

Jak to sensownie rozwiązać?

I kolejne pytanie:

Jak rozwiązuje się kwestie ładowania danych np. do tabelki na stronie?

Powiedzmy przy pierwszym wejściu na podstronę z listą warzyw chciałbym żeby serwer zwrócił stronę z już uzupełnioną tabelką.

Tutaj musiałbym np. w kontrolerze z kodu C# odwołać się do Web API, pobrać warzywa i wrzucić do widoku.

Potem jeśli sama tabelka ma być odświeżana ajaxem co 30 sekund to znowu muszę to pobierać ajaxem?

Wtedy w dwóch miejscach musiałbym pobierać dane:

w kontrolerze w C# aby zwrócić wypełniony widok przy pierwszym wejsciu na strone, a potem dodatkowo to samo robić jeszcze ajaxem w JS przy odświeżaniu.

Coś mi tu nie gra. Jak to się robi? :) Jakie jest sensowne rozwiązanie?
  • 13
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Chyba muszę ten token przekazywać w dodawkowym headerze HTTP?


Bo przecież w aplikacji Androidowej nie będę miał ciasteczek?

W takim wypadku musi być https bo ktoś przechwyci token.

Zależy jaki ma być poziom bezpieczeństwa.
  • Odpowiedz
@krukers: ponadto możesz dodać podpis cyfrowy do danych, który będzie ważny przez jakiś określony czas.

aplikacja i serwer powinny mieć swoje klucze, którymi będą podpisywały komunikację.
  • Odpowiedz
przekazywałbym jeszcze token związany z aplikacją.


@aaandrzeeey: racja, dobrze, że zwróciłeś uwagę.

Token jako parametr WS... ale skąd go wygodnie pobierać? Z jakiegoś pola hidden widocznego na każdej stronie?
  • Odpowiedz
@mathix:

faktycznie, ale jeśli będę odpalał API z Androida to nie ma chyba po co się bawić w udawanie ciasteczek, dodałbym własny AccessToken tak jak mówisz.

A w apce webowej chyba faktycznie będę to trzymał w ciasteczku. Będzie do tego dostęp z JS i po stronie serwera też wygodnie mogę je
  • Odpowiedz