<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Web Services</title><link>https://www.dotnetzone.gr:443/cs/forums/21/ShowForum.aspx</link><description>Συζήτηση περί των web services και WSE, την υλοποίησή τους με το .NET Framework, καθώς και θέματα interoperability με άλλα συστήματα</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Ασφάλεια μέσω Windows Authentication, SSL και Client Certificates</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/6282.aspx</link><pubDate>Thu, 20 Oct 2005 17:35:47 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:6282</guid><dc:creator>kkara</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/6282.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=21&amp;PostID=6282</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/cs/Themes/dotnetzone-black/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;cgeo wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td width="100%" valign="top" class="txt4"&gt;&lt;p&gt;Ερώτηση 1: Χρήστες εκτός του domain σου έχεις; Αν
σου ζητήσουν αύριο να μπορεί να γίνει κλήση των web services και απ'
έξω, θα ανοίξεις account για κάθε εξωτερικό χρήστη στο domain; Πως θα
το χειριστείς;&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Στην πραγματικότητα δεν έχω χρήστες εντός του domain. Έχω μόνο
εξωτερικούς χρήστες, οι οποίοι όμως είναι λίγοι στο πλήθος. Σκοπεύω να
τους οργανώσω σε User Groups του τοπικού μηχανήματος και φυσικά να τους
δώσω μόνο τα απαραίτητα δικαιώματα για να εκτελούν την εφαρμογή (πρέπει
ακόμα να δω πως θα παίξει με τη Βάση, λογικά δεν θα έχω πρόβλημα γιατί
εκεί θα χρησιμοποιήσω SQL Server authentication και όχι Windows καθότι
η Βάση θα είναι σε άλλον Server).&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/cs/Themes/dotnetzone-black/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;cgeo wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td width="100%" valign="top" class="txt4"&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Ερώτηση 2: Μέσα στο κάθε service πως χειρίζεσαι τους ελέγχους για το
authentication; Λες πχ, if Not (UserIsInRole("Administrators") orelse
UserIsInRole("SuperUsers")) then throw new AuthenticationException;&lt;/p&gt;

&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;
&lt;br&gt;
Θα μπορούσα να χρησιμοποιήσω ελέγχους παρόμοιους με αυτούς που
αναφέρεις μέσω της&amp;nbsp;&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;Thread.CurrentPrincipal.IsInRole(&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"ServerName\\SampleGroup"&lt;/span&gt;)&lt;/span&gt;,
αλλά ανακάλυψα ορισμένα ενδιαφέροντα πραγματάκια και είπα να τα
χρησιμοποιήσω... Το άρθρο που ανέφερα σε προηγούμενο post αναφέρει ότι
μπορείς να κλειδώσεις μια μέθοδο με το attribute &lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;PrincipalPermissionAttribute&lt;/span&gt; ως εξής : &lt;br&gt;
&lt;br&gt;
&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;[WebMethod]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[PrincipalPermissionAttribute(SecurityAction.Demand,Authenticated=&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;true&lt;/span&gt;,Role=&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"ServerName\\SampleGroup"&lt;/span&gt;)]&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; HelloWorld() {&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;return&lt;/span&gt; &lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"Hello World"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;br&gt;
&lt;br&gt;
Με αυτό τον τρόπο μόνο χρήστες του SampleGroup μπορούν να εκτελέσουν
την μέθοδο, ειδάλλως γίνεται throw ένα &lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;SecurityException&lt;/span&gt;. Εμένα δεν μου έκανε αυτό γιατί
α) ήθελα να ελέγχω για πολλαπλά group, β) ήθελα να χειρίζομαι το
Exception (wrap και μετά throw). Έτσι κατέληξα στο να χρησιμοποιήσω την
κλάση &lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;PrincipalPermission&lt;/span&gt; ως εξής : &lt;br&gt;
&lt;br&gt;
&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;[WebMethod]&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; HelloWorld() {&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;//Φτιάχνουμε το PrincipalPermission που υποδεικνύει ότι ο&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;//τρέχων χρήστης (από το τρέχων IPrincipal) ανήκει στο UserGroup1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    PrincipalPermission perm1 &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt;&lt;br /&gt;PrincipalPermission(&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;""&lt;/span&gt;, &lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"UserGroup1"&lt;/span&gt;, &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;true&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;//Αντίστοιχα για το UserGroup2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    PrincipalPermission perm2 &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt;&lt;br /&gt;PrincipalPermission(&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;""&lt;/span&gt;, &lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"UserGroup2"&lt;/span&gt;, &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;true&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;//Ενώνω τα PrincipalPermission με Union&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;//οπότε να αρκεί να ισχύει ένα από τα δύο&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    PrincipalPermission finalPerm &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; perm1.Union(perm2);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;try&lt;/span&gt; {&lt;br /&gt;&lt;br /&gt;        finalPerm.Demand();&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;catch&lt;/span&gt; (SecurityException ex) {&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;throw&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; Exception(&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"Μεγάλε, που πας χωρίς δικαιώματα;"&lt;/span&gt;, ex);&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;return&lt;/span&gt; &lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"Hello World"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;br&gt;
&lt;br&gt;
Προφανώς τα User Groups τα διαβάζω από κάπου, αλλά ο παραπάνω κώδικας
δίνει την κεντρική ιδέα... Δεν έχω αποφασίσει ακόμα αν θα βάλω τον
κατάλληλο κώδικα στον Costructor του Web Service ή σε κάθε Web Method
αλλά δεν νομίζω να έχει και μεγάλη διαφορά...&lt;br&gt;
&lt;br&gt;</description></item><item><title>Απ: Ασφάλεια μέσω Windows Authentication, SSL και Client Certificates</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/6271.aspx</link><pubDate>Thu, 20 Oct 2005 04:26:41 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:6271</guid><dc:creator>Χρήστος Γεωργακόπουλος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/6271.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=21&amp;PostID=6271</wfw:commentRss><description>&lt;P&gt;Ερώτηση 1: Χρήστες εκτός του domain σου έχεις; Αν σου ζητήσουν αύριο να μπορεί να γίνει κλήση των web services και απ' έξω, θα ανοίξεις account για κάθε εξωτερικό χρήστη στο domain; Πως θα το χειριστείς;&lt;/P&gt;
&lt;P&gt;Ερώτηση 2: Μέσα στο κάθε service πως χειρίζεσαι τους ελέγχους για το authentication; Λες πχ, if Not (UserIsInRole("Administrators") orelse UserIsInRole("SuperUsers")) then throw new AuthenticationException;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: Ασφάλεια μέσω Windows Authentication, SSL και Client Certificates</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/6261.aspx</link><pubDate>Wed, 19 Oct 2005 21:35:11 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:6261</guid><dc:creator>kkara</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/6261.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=21&amp;PostID=6261</wfw:commentRss><description>Ok, το πρόβλημα εντοπίστηκε και τελικά λύθηκε. Δεν είχε σχέση ούτε με
Security, ούτε με Impersonation, αλλά ήταν καθαρά θέμα της IsInRole και
δύο ιδιαταιροτήτων :&lt;br&gt;
&lt;br&gt;
&lt;ol&gt;
  &lt;li&gt;Όταν ελέγχεις με την IsInRole για bultin groups (π.χ.
Administrators, Power Users, κτλ), δεν δουλεύει το
&amp;lt;MachineName&amp;gt;\&amp;lt;GroupName&amp;gt;, αλλά μόνο το
BUILTIN\&amp;lt;GroupName&amp;gt;&lt;/li&gt;
  &lt;li&gt;Όταν σε ένα group που έχεις φτιάξει εσύ τοποθετήσεις τον χρήστη
με τον οποίο είσαι logged in, τότε η τοποθέτηση δεν ισχύει προτού
κάνεις logoff και logon&lt;/li&gt;
&lt;/ol&gt;
Λόγω του 1. δεν μπορούσα να δω ότι ο χρήστης ανήκει στα Group που ήξερα
ήδη ότι ανήκει και λόγω του 2. όταν τον τοποθετούσα με το χέρι σε
καινούριο group, δεν μπορούσα να το δω (δεν έκανα logoff ο άμοιρος).&lt;br&gt;
&lt;br&gt;
Πολύ χρήσιμος κώδικας ήταν ο παρακάτω : &lt;br&gt;
&lt;br&gt;
&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;//Try to get roles from WindowsIdentity instance via reflexion.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;MethodInfo getroles &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;typeof&lt;/span&gt;(WindowsIdentity).GetMethod(&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"GetRoles"&lt;/span&gt;, BindingFlags.Instance &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;|&lt;/span&gt; BindingFlags.NonPublic);&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt;[] roles &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; (&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt;[])getroles.Invoke(windowsPrincipal.Identity, &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;null&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;
&lt;br&gt;
που μου επέτρεψε να καλέσω την NonPublic μέθοδο GetRoles για να δω σε
ποια group ανήκει τελικά ο χρήστης (μα καλά γιατί δεν είναι public αυτή
να μας γλύτωνε τον κόπο &lt;img src="/cs/emoticons/emotion-5.gif" alt="Wink [;)]" /&gt;).&lt;br&gt;
&lt;br&gt;
Τελικά δεν θα ανοίξω σουβλατζίδικο... κλαψ λυγμ...&lt;br&gt;</description></item><item><title>Απ: Ασφάλεια μέσω Windows Authentication, SSL και Client Certificates</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/6260.aspx</link><pubDate>Wed, 19 Oct 2005 21:08:56 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:6260</guid><dc:creator>kkara</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/6260.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=21&amp;PostID=6260</wfw:commentRss><description>Αχα!!! Από ότι φαίνεται είναι πρόβλημα της &lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;WindowsIdentity.IsInRole&lt;/span&gt;, καθώς αν την καλέσω με
BuiltIn ρόλο παίζει μια χαρά (π.χ.&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;((WindowsIdentity)Thread.CurrentPrincipal).IsInRole(System.Security.Principal.WindowsBuiltInRole.PowerUser)&lt;/span&gt;).
Από ότι βλέπω έχουν πολλοί παρόμοιο πρόβλημα (βλ. &lt;a href="http://www.gotdotnet.com/community/messageboard/Thread.aspx?id=31370"&gt;εδώ&lt;/a&gt;, &lt;a href="http://www.dotnet247.com/247reference/msgs/58/290492.aspx"&gt;εδώ&lt;/a&gt; κι &lt;a href="http://www.mcse.ms/archive113-2003-12-228517.html"&gt;εδώ&lt;/a&gt;). Θα συνεχίσω να το ψάχνω και θα σας ενημερώσω για ότι βρω...&lt;br&gt;</description></item><item><title>Απ: Ασφάλεια μέσω Windows Authentication, SSL και Client Certificates</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/6255.aspx</link><pubDate>Wed, 19 Oct 2005 19:56:14 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:6255</guid><dc:creator>kkara</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/6255.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=21&amp;PostID=6255</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/cs/Themes/default/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;gcapnias wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td width="100%" valign="top" class="txt4"&gt;&lt;p&gt;Από όλα αυτά που λες... κάτι δεν πάει! Το working schema που παρουσιάζεται με το whitepaper που ανέφερες, σίγουρα δουλεύει.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Αυτός είναι και ο λόγος που τα έχω πάρει στο κρανίο! Κανονικά θα
έπρεπε να δουλεύει. Ακριβώς γι' αυτό το λόγο και αποφάσισα να
ακολουθήσω το άρθρο by the book!&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/cs/Themes/default/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;gcapnias wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td width="100%" valign="top" class="txt4"&gt;&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;1. Το IIS Authentication δεν είναι ASP.NET Authentication.&amp;nbsp;Άλλο
το authentication&amp;nbsp;με τα&amp;nbsp;cerificates που το κάνει ο IIS, αλλά
δεν είναι υποχρεωμένος να το περάσει στο ASP.NET Authentication, αν το
ASP.NET Authentication δεν είναι σε Windows mode. Και αυτό ορίζεται
μέσα από το web.config της εφαρμογής/webservice.&lt;/p&gt;
&lt;p&gt;Εσύ αναφέρεις ότι ο χρήστης που βλέπεις είναι ο ΝΤ Authority\Network
Service που είναι ο default λογαριασμός που τρέχει το ASP.NET σε
Windows 2003 για&amp;nbsp;όλα τα unmanaged calls που γίνονται από το
ASP.NET, βλέπε secure connection σε SQL Server, file system access
κτλ., άρα μάλλον δεν είναι σε Windows mode το authentication του
ASP.NET.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Το έχω διπλο- και τριπλο- ελέγξει το web.config. Αρχίζω να σκέφτομαι
τι μπορεί να υπάρχει που να εμποδίζει το ASP.NET να εκτελέσει τον
κώδικα με τον χρήστη που του δίνει ο IIS. Δοκιμάζοντας τον ίδιο ακριβώς
κώδικα σε Windows 2000 Advanced Server είχα τα ίδια αποτελέσματα με την
εναλλαγή φυσικά του ΝΤ Authority\Network
Service με το account του ASPNET. Δοκίμασα μέχρι και να κάνω υποχρεωτικό Impersonation με στο Web.Config με &lt;font face="Courier New"&gt;&amp;lt;identity impersonate="true" userName="kkara" password="password" /&amp;gt;&lt;/font&gt; και πάλι δεν άλλαξε τίποτα. Φαίνεται δηλαδή ότι για κάποιο λόγο δεν μπορεί να κάνει Impersonate, παρόλο που η κλήση στο &lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;Thread.CurrentPrincipal.Identity&lt;/span&gt; επιστρέφει τον σωστό χρήστη...&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/cs/Themes/default/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;gcapnias wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td width="100%" valign="top" class="txt4"&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;2.&amp;nbsp;Η κλήση για το Active Directory... Δεν είναι με WinNT://
αλλά με LDAP://. Αυτό που κάνεις με αυτή την κλήση, είναι να καλείς το
Domain συμβατό με NT4 για authentication. Αυτό που σου απαντάει είναι
κουτό, αν λάβεις υπόψη σου ότι δεν επιστρέφει όλα τα groups που ανήκει
ο χρήστης, αλλά το ένα - αν ανήκει σε ένα - και το default - που έχει
δωθεί από τον administrator - αν ανήκει σε περισσότερα από ένα, που
φαίνεται να είναι και το πρόβλημά σου σε αυτή την περίπτωση.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Την κλήση στο Active Directory την έκανα πρόχειρα, μόνο και μόνο για
να πάρω τα User Groups. Επιστρέφει όντως όλα τα User Groups, απλά έχω
βάλει τον έλεγχο &lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;Thread.CurrentPrincipal.IsInRole(&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"OLYMPOS\\"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;+&lt;/span&gt;&lt;br /&gt;child.Name)&lt;/span&gt; οπότε γι' αυτό επιστρέφει μόνο τα group στα οποία
ανήκει ο χρήστης.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/cs/Themes/default/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;cgeo wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td width="100%" valign="top" class="txt4"&gt;&lt;/p&gt;
&lt;p&gt;Αλλά γιατί επιλέγεις αυτό το μοντέλο authentication; Όχι ότι είναι άσχημο, απλά 
θα ήθελα να ακούσω λόγους που σε οδήγησαν σε αυτή την κατεύθυνση και αν μπορείς 
να πεις,&amp;nbsp;και το πραγματικό περιβάλλον στο οποίο κινείσαι.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Βασικά εγώ το κυριότερο που ήθελα ήταν να έχω όσο μεγαλύτερη
ασφάλεια όσον αφορά του ποιός μπορεί να εκτελέσει το service (χωρίς
όμως να κινηθώ σε WS-Secure). Γι' αυτό και μπαίνουν στη μέση τα Client
Certificates. Το authentication όμως είναι επίσης σημαντικό για την
εφαρμογή. Οι Clients ομαδοποιούνται σε groups και κάθε group
επιτρέπεται να έχει πρόσβαση μόνο σε δεδομένα που του ανήκουν (δυστυχώς
δεν μπορώ να πω πολλά παραπάνω για τη φύση της εφαρμογής, αν και
κάποιοι που διαβάζουν έχουν καταλάβει περί τίνος πρόκειται &lt;img src="/cs/emoticons/emotion-5.gif" alt="Wink [;)]" /&gt;. Θα
μπορούσα βέβαια να έχω ένα πίνακα στον SQL Server με Usernames,
Passwords και Groups, αλλά τότε μαζί με τα Client Certificates θα
έπρεπε να δίνω και Username/Password που είναι κάπως υπερβολικό. Γι'
αυτό και σκέφτηκα να χρησιμοποιήσω Windows Authentication ώστε απλά να
φτιάξω τα Group και τα Accounts στον Server. Αυτό επίσης με προστατεύει
ώστε στην περίπτωση που γίνουν πολλοί οι Client να μπορέσω να κάνω
Many-To-1 mapping στον IIS και έτσι να κρατήσω μόνο τα Groups των
χρηστών και ένα χρήστη για κάθε Group, χωρίς να επηρεάσω την εφαρμογή
μου.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Τελικά αν δεν βρω λύση στο εν λόγω πρόβλημα θα αναγκαστώ να κάνω το
ανάποδο, θα προσπαθήσω να βρω από το όνομα του χρήστη (το οποίο έχω!)
σε ποια group ανήκει. Απλά θα ήταν ωραίο να δουλέψει απ'ευθείας η
IsInRole (ΟΠΩΣ
ΑΛΛΩΣΤΕ ΘΑ ΕΠΡΕΠΕ&lt;img src="/cs/emoticons/emotion-12.gif" alt="Angry [:@]" /&gt;). Αν δεν πετύχει και αυτό θα σκίσω τα πτυχία μου
και θα ανοίξω σουβλατζίδικο (μάλλον περισσότερα θα βγάζω από ότι τώρα
&lt;img src="/cs/emoticons/emotion-1.gif" alt="Smile [:)]" /&gt;&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;</description></item><item><title>Απ: Ασφάλεια μέσω Windows Authentication, SSL και Client Certificates</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/6249.aspx</link><pubDate>Wed, 19 Oct 2005 07:40:41 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:6249</guid><dc:creator>Χρήστος Γεωργακόπουλος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/6249.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=21&amp;PostID=6249</wfw:commentRss><description>&lt;P&gt;&lt;STRIKE&gt;Νομίζω ότι για να γίνει αυτό που θέλεις χρειάζεσαι impersonate. Ένα αρθράκι που βρήκα πρόχειρα: &lt;/STRIKE&gt;&lt;A href="http://www.dotnetspider.com/Technology/KBPages/403.aspx"&gt;&lt;STRIKE&gt;http://www.dotnetspider.com/Technology/KBPages/403.aspx&lt;/STRIKE&gt;&lt;/A&gt;&amp;nbsp;(Γράψε άκυρο, δεν είδα ότι το έχεις δοκιμάσει)&lt;/P&gt;
&lt;P&gt;Αλλά γιατί επιλέγεις αυτό το μοντέλο authentication; Όχι ότι είναι άσχημο, απλά θα ήθελα να ακούσω λόγους που σε οδήγησαν σε αυτή την κατεύθυνση και αν μπορείς να πεις,&amp;nbsp;και το πραγματικό περιβάλλον στο οποίο κινείσαι.&lt;/P&gt;</description></item><item><title>Απ: Ασφάλεια μέσω Windows Authentication, SSL και Client Certificates</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/6248.aspx</link><pubDate>Wed, 19 Oct 2005 07:06:38 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:6248</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/6248.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=21&amp;PostID=6248</wfw:commentRss><description>&lt;P&gt;Από όλα αυτά που λες... κάτι δεν πάει! Το working schema που παρουσιάζεται με το whitepaper που ανέφερες, σίγουρα δουλεύει.&lt;/P&gt;
&lt;P&gt;Μερικά πράγματα παραπάνω για διευρεύνηση:&lt;/P&gt;
&lt;P&gt;1. Το IIS Authentication δεν είναι ASP.NET Authentication.&amp;nbsp;Άλλο το authentication&amp;nbsp;με τα&amp;nbsp;cerificates που το κάνει ο IIS, αλλά δεν είναι υποχρεωμένος να το περάσει στο ASP.NET Authentication, αν το ASP.NET Authentication δεν είναι σε Windows mode. Και αυτό ορίζεται μέσα από το web.config της εφαρμογής/webservice.&lt;/P&gt;
&lt;P&gt;Εσύ αναφέρεις ότι ο χρήστης που βλέπεις είναι ο ΝΤ Authority\Network Service που είναι ο default λογαριασμός που τρέχει το ASP.NET σε Windows 2003 για&amp;nbsp;όλα τα unmanaged calls που γίνονται από το ASP.NET, βλέπε secure connection σε SQL Server, file system access κτλ., άρα μάλλον δεν είναι σε Windows mode το authentication του ASP.NET.&lt;/P&gt;
&lt;P&gt;2.&amp;nbsp;Η κλήση για το Active Directory... Δεν είναι με WinNT:// αλλά με LDAP://. Αυτό που κάνεις με αυτή την κλήση, είναι να καλείς το Domain συμβατό με NT4 για authentication. Αυτό που σου απαντάει είναι κουτό, αν λάβεις υπόψη σου ότι δεν επιστρέφει όλα τα groups που ανήκει ο χρήστης, αλλά το ένα - αν ανήκει σε ένα - και το default - που έχει δωθεί από τον administrator - αν ανήκει σε περισσότερα από ένα, που φαίνεται να είναι και το πρόβλημά σου σε αυτή την περίπτωση.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;George J.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Ασφάλεια μέσω Windows Authentication, SSL και Client Certificates</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/6247.aspx</link><pubDate>Wed, 19 Oct 2005 05:42:41 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:6247</guid><dc:creator>kkara</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/6247.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=21&amp;PostID=6247</wfw:commentRss><description>Καταρχήν συγχωρείστε με για το μέγεθος του post. Ψιλιάζομαι (πριν κάν ξεκινήσω να το γράφω) ότι θα είναι μεγάλο.&lt;br&gt;
&lt;br&gt;Στόχος μου να δημιουργήσω "ασφαλείς" Web
Services. Δεν αναλύω περαιτέρω το τι επιλογές υπάρχουν για την υλοποίηση της ασφάλειας, γιατί είναι ολόκληρο Forum
από μόνο του. Αποφασίστηκε πάντως οι υπηρεσίες να διασφαλίζονται
μέσω SSL και Client Certificates. Ο IIS δεν θα επιτρέπει
Anonymous Access&lt;sup&gt;.&lt;/sup&gt; τουναντίον (πσσσσσσσ, τι είπα πάλι) θα
επιβάλλει τη χρήση Client Certificates και θα επιτρέπει μονάχα συγκεκριμένα Certificates. Γνωρίζω ότι δεν είναι ότι
κομψότερο, αλλά τα Web Services θα καλούνται από λίγους και σχετικά
ελεγχόμενους clients. (Περισσότερες πληροφορίες για τα παραπάνω
βρίσκονται &lt;a href="http://msdn.microsoft.com/webservices/webservices/building/security/default.aspx?pull=/library/en-us/dnwebsrv/html/httpsecurity.asp"&gt;εδώ&lt;/a&gt;,
από εκεί άλλωστε άντλησα το ακριβές HowTo &lt;img src="/cs/emoticons/emotion-5.gif" alt="Wink [;)]" /&gt;). Ως έξτρα ασφάλεια
(κερασάκι στην τούρτα) θα επιτρέπεται πρόσβαση μόνο σε συγκεκριμένες IP
διευθύνσεις.&lt;br&gt;
&lt;br&gt;
Έχει καλώς ως εδώ. Χρειάζεται όμως να γίνει και Authentication των
clients. Εφόσον ισχύουν όλα τα παραπάνω, θα ήταν μάλλον υπερβολικό να
χρησιμοποιήσω username/password και να τα ελέγχω στη Βάση Δεδομένων.
Θέλω επομένως να κάνω map τα Client Certificates σε συγκεκριμένα
Windows Accounts και έτσι να παίρνω το ποιός είναι ο client από το
&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;Thread.CurrentPrincipal.Identity.Name&lt;/span&gt;.
Δουλεύει μια χαρά. Το πρόβλημα έγκειται στη χρήση της μεθόδου &lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;Thread.CurrentPrincipal.IsInRole(strMachineName &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;+&lt;/span&gt; &lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"\\"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;+&lt;/span&gt;&lt;br /&gt;strRole)&lt;/span&gt;, όπου strMachineName είναι το όνομα του Server και
strRole ένα User Group (π.χ. "Guests"). Κατά την κλήση αυτής της
μεθόδου δεν χρησιμοποιείται το &lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;Thread.CurrentPrincipal.Identity&lt;/span&gt; (όπως θα έπρεπε)
αλλά το NT AUTHORITY\NETWORK SERVICE. Για παράδειγμα, δοκιμάστε τον
παρακάτω κώδικα : &lt;br&gt;
&lt;br&gt;
&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;[WebMethod]&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; WhoAmI() {&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; s &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; String.Empty;&lt;br /&gt;    s += &lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"Running as User : "&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;+&lt;/span&gt; Thread.CurrentPrincipal.Identity.Name &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;+&lt;/span&gt; &lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"\n"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    s += &lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"Current Windows Identity : "&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;+&lt;/span&gt; System.Security.Principal.WindowsIdentity.GetCurrent().Name;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;return&lt;/span&gt; s;&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;br&gt;
&lt;br&gt;
Προσοχή ότι αν ισχύουν όσα προανέφερα θα πρέπει να κληθεί με
συγκεκριμένο Client Certificate, να έχουν γίνει σωστά οι ρυθμίσεις στον
IIS, κτλ, κτλ. Για ευκολία στην δοκιμή συχνά άφηνα την όλη διαδικασία
με Certificates και SSL και χρησιμοποιούσα Integrated Windows
Authentication και Basic Authentication. Έχοντας κάνει map ένα
certificate στο account μου και εκτελώντας το παραπάνω service, το
αποτέλεσμα είναι πάντοτε το εξής : &lt;br&gt;
&lt;br&gt;
&lt;font face="Courier New"&gt;Running as User : OLYMPOS\kkara&lt;br&gt;
Current Windows Identity : NT AUTHORITY\NETWORK SERVICE&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
(προφανώς το PC μου έχει Computer Name OLYMPOS, ίσως γι' αυτό να μη δουλεύει τίποτα, φταίνε οι Θεοί του Ολύμπου &lt;img src="/cs/emoticons/emotion-1.gif" alt="Smile [:)]" /&gt;) &lt;br&gt;
Αν καταλαβαίνω καλά το πως δουλεύει όλο το σκηνικό, τότε αυτό είναι
σωστό αποτέλεσμα αφού ο κώδικας τρέχει με το συγκεκριμένο Account. &lt;br&gt;Πάντως η παρακάτω μέθοδος δεν επιστρέφει αυτό που θα ήθελα : &lt;br&gt;
&lt;br&gt;

&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;/// &amp;lt;summary&amp;gt;Επιστρέφει τα User Groups στα οποία ανήκει ο χρήστης που εκτελεί την υπηρεσία&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;[WebMethod]&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; WhichRolesAmIIn() {&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; s &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; String.Empty;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;//Βρίσκουμε το DirectoryEntry του μηχανήματος μέσω των DirectoryServices&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    DirectoryEntry deMachine &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; DirectoryEntry(&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"WinNT://OLYMPOS"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;foreach&lt;/span&gt;(DirectoryEntry child &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;in&lt;/span&gt; deMachine.Children)&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;//Από τα παιδιά του deMachine μας απασχολούν τα Group χρηστών&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;if&lt;/span&gt; (child.SchemaClassName ==&lt;br /&gt;&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"Group"&lt;/span&gt; &amp;amp;&amp;amp; Thread.CurrentPrincipal.IsInRole(&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"OLYMPOS\\"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;+&lt;/span&gt;&lt;br /&gt;child.Name))&lt;br /&gt;&lt;br /&gt;            s += &lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"User "&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;+&lt;/span&gt;&lt;br /&gt;Thread.CurrentPrincipal.Identity.Name &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;+&lt;/span&gt; &lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;" belongs in : "&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;+&lt;/span&gt; child.Name &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;+&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"\n"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;return&lt;/span&gt; s;&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;br&gt;
&lt;br&gt;
Όταν καλείται η μέθοδος επιστρέφει : &lt;br&gt;
&lt;br&gt;
&lt;font face="Courier New"&gt;User OLYMPOS\kkara belongs in : CERTSVC_DCOM_ACCESS&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
Ενώ φυσικά ο χρήστης kkara ανήκει στους Administrators, στους Power
Users, κτλ κτλ. Ελέγχοντας αυτό το user group διαπίστωσα ότι είναι το
μοναδικό στο οποίο οι χρήστες που είναι δηλωμένοι περιγράφονται ως
/Everyone. Τελικά ακόμα δεν έχω καταλάβει ποιόν ακριβώς χρήστη
χρησιμοποιεί όταν κάνει το ερώτημα IsUserInRole.&lt;br&gt;
&lt;br&gt;
Δοκίμασα να κάνω και Impersonation, μέσω της εντολής &lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;((WindowsIdentity)Thread.CurrentPrincipal.Identity).Impersonate();&lt;/span&gt;
(οπότε τότε αλλάζει το WindowsIdentity.GetCurrent() επιστρέφει όντως
τον χρήστη kkara) αλλά και πάλι το αποτέλεσμα ήταν το ίδιο. Ακόμα κι
όταν δοκίμασα να απλοποιήσω τελείως τα πράγματα και απλά να
χρησιμοποιώ Basic Authentication (χωρίς SSL, χωρίς Credentials, χωρίς
τίποτα) είχα και πάλι τα ίδια ακριβώς αποτελέσματα.&lt;br&gt;
&lt;br&gt;
Έχει κανείς καμιά ιδέα για το τι συμβαίνει; Τα νεύρα μου κοντεύουν να
σπάσουν &lt;img src="/cs/emoticons/emotion-9.gif" alt="Crying [:'(]" /&gt;... Θέλω να χρησιμοποιήσω τα Group στα οποία ανήκει ο
χρήστης για να περιορίσω την πρόσβαση σε επίπεδο κώδικα (με το
PrincipalPermissionAttribute) αλλά οποιοδήποτε τρόπο κι αν μου πείτε
για να βρω σε ποιά group ανήκει ο χρήστης, θα είναι ένα βήμα προς την
κατάλληλη κατεύθυνση...&lt;br&gt;</description></item></channel></rss>