مشروع ASP.NET البسيط مشروع BoilerPlate. لا يوجد EF ، لا توجد قاعدة بيانات ، لا يوجد هوية ، لا يوجد تخزين للجلسة ، مجرد تسجيل أساسي في النظام لكل من ملفات تعريف الارتباط و JWT مع اثنين من سياسات التفويض ووحدة تحكم مع مجموعة من الأمثلة. تم تحديثه مؤخرًا إلى .NET 8.
للحصول على ما يصل وتشغيل cd فقط إلى الجذر حيث يوجد ملف .csproj وتشغيل الأوامر التالية.
cd examples/cookies+api
dotnet run
يحاكي التطبيق نظام المشرف الأساسي القائم على المجموعة. هناك ثلاث مجموعات يمكن للمستخدمين أن يكونوا أعضاء: users superusers admins . جميع المستخدمين هم أعضاء في مجموعة users ولكن ليس جميعهم من أعضاء superusers و admins وهناك أجزاء من التطبيق تستخدم سمة Authorize مع الوصول القائم على السياسة إلى الوصول إلى المرشح.
هناك سلسلة من عمليات تسجيل الدخول للاختبار. تحتوي الصفحة الرئيسية على جدول للمستخدمين وكلمات المرور المتاحة وتشير إلى ما إذا كان المستخدم عضوًا في superusers و / أو admins .

يمكنك بعد ذلك تشغيل سلسلة الاختبارات أدناه ومعرفة الأقسام التي يمكنك عرضها اعتمادًا على تسجيل الدخول. تقوم جميع الاختبارات بإجراء مكالمات إلى فئة ExampleController .
تصفح إلى http://localhost/auth وإذا تم تسجيل الدخول تحت أي مستخدم ، فيجب أن ترى ما يلي.
Only authenticated cookie based requests from superusers receive this message.
تصفح إلى http://localhost/superuser ، وإذا تم تسجيل الدخول تحت مستخدم في إما superusers أو admins ، يجب أن ترى ما يلي.
Only authenticated cookie based requests from superusers receive this message.
تصفح إلى http://localhost/admin وإذا تم تسجيل الدخول تحت مستخدم في admins ، فيجب أن ترى ما يلي.
Only authenticated cookie based requests from admins receive this message.
يحصل الأمر الأول على رمز مميز سيكون مطلوبًا للطلبات اللاحقة. في المثال أدناه ، يتم استخدام admin المستخدم مع كلمة المرور password ، ولكن هناك تسجيلات تسجيلات أخرى للاختبار والتي ستعطي نتائج مختلفة.
curl -X POST http://localhost:5000/api/login -H "Content-Type: application/x-www-form-urlencoded" -d "Name=admin&Password=password"
يجب أن يؤدي الأمر أعلاه إلى شيء مشابه لما يلي (من الواضح أن قيمة الرمز المميز ستكون مختلفة).
{
"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbkBkb21haW4iLCJqdGkiOiJkNGM5MDE0Zi0zOGYxLTQ3NTItODU3YS03ZTc0YzU0MjY3ZDciLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiYWRtaW4iLCJhZG1pbnMiOiIxIiwic3VwZXJ1c2VycyI6IjIiLCJ1c2VycyI6IjMiLCJleHAiOjE1MDQzODk0NTEsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9hcGkvIiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAwL2FwaS8ifQ.gFnf39Vj16vEmcI1HdwPajH6sRHusxtjZ2eh0Xc1cJs"
}
ثم يتم استخدام قيمة الرمز المميز مع الطلبات اللاحقة. بالنسبة للأمثلة أدناه ، استبدل TOKEN_VALUE بأي قيمة يتم الحصول عليها من الخطوة أعلاه.
curl http://localhost:5000/api/auth -H "Authorization: Bearer TOKEN_VALUE"
بغض النظر عن المستخدم الذي يجب عليك رؤية الرمز المميز الخاص بك بالنسبة لك.
Only authenticated token based requests receive this message.
سيعمل الاختبار التالي للمستخدمين إما في superusers أو admins .
curl http://localhost:5000/api/superuser -H "Authorization: Bearer TOKEN_VALUE"
يجب أن ينتج الأمر أعلاه ما يلي.
Only authenticated token based requests from superusers receive this message.
سيعمل الاختبار التالي للمستخدمين في admins .
curl http://localhost:5000/api/admin -H "Authorization: Bearer TOKEN_VALUE"
يجب أن ينتج الأمر أعلاه ما يلي.
Only authenticated token based requests from admins receive this message.
يوضح المثال التالي معالجة JWT ، والرمز في طريقة TokenInfo لفئة ExampleController .
curl http://localhost:5000/api/tokeninfo -H "Authorization: Bearer TOKEN_VALUE"
يجب تقديم أي مستخدم مصادق عليه بشيء مشابه لما يلي.
{
"token":{
"actor":null,
"audiences":[
"http://localhost:5000/api/"
],
"claims":[
{
"issuer":"http://localhost:5000/api/",
"originalIssuer":"http://localhost:5000/api/",
"properties":{
},
"subject":null,
"type":"sub",
"value":"admin@domain",
"valueType":"http://www.w3.org/2001/XMLSchema#string"
},
{
"issuer":"http://localhost:5000/api/",
"originalIssuer":"http://localhost:5000/api/",
"properties":{
},
"subject":null,
"type":"jti",
"value":"f85815ae-69c4-4fec-8553-bc1199e3cdce",
"valueType":"http://www.w3.org/2001/XMLSchema#string"
},
{
"issuer":"http://localhost:5000/api/",
"originalIssuer":"http://localhost:5000/api/",
"properties":{
},
"subject":null,
"type":"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name",
"value":"admin",
"valueType":"http://www.w3.org/2001/XMLSchema#string"
},
{
"issuer":"http://localhost:5000/api/",
"originalIssuer":"http://localhost:5000/api/",
"properties":{
},
"subject":null,
"type":"admins",
"value":"1",
"valueType":"http://www.w3.org/2001/XMLSchema#string"
},
{
"issuer":"http://localhost:5000/api/",
"originalIssuer":"http://localhost:5000/api/",
"properties":{
},
"subject":null,
"type":"superusers",
"value":"2",
"valueType":"http://www.w3.org/2001/XMLSchema#string"
},
{
"issuer":"http://localhost:5000/api/",
"originalIssuer":"http://localhost:5000/api/",
"properties":{
},
"subject":null,
"type":"users",
"value":"3",
"valueType":"http://www.w3.org/2001/XMLSchema#string"
},
{
"issuer":"http://localhost:5000/api/",
"originalIssuer":"http://localhost:5000/api/",
"properties":{
},
"subject":null,
"type":"exp",
"value":"1504392381",
"valueType":"http://www.w3.org/2001/XMLSchema#integer"
},
{
"issuer":"http://localhost:5000/api/",
"originalIssuer":"http://localhost:5000/api/",
"properties":{
},
"subject":null,
"type":"iss",
"value":"http://localhost:5000/api/",
"valueType":"http://www.w3.org/2001/XMLSchema#string"
},
{
"issuer":"http://localhost:5000/api/",
"originalIssuer":"http://localhost:5000/api/",
"properties":{
},
"subject":null,
"type":"aud",
"value":"http://localhost:5000/api/",
"valueType":"http://www.w3.org/2001/XMLSchema#string"
}
],
"encodedHeader":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
"encodedPayload":"eyJzdWIiOiJhZG1pbkBkb21haW4iLCJqdGkiOiJmODU4MTVhZS02OWM0LTRmZWMtODU1My1iYzExOTllM2NkY2UiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiYWRtaW4iLCJhZG1pbnMiOiIxIiwic3VwZXJ1c2VycyI6IjIiLCJ1c2VycyI6IjMiLCJleHAiOjE1MDQzOTIzODEsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9hcGkvIiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAwL2FwaS8ifQ",
"header":{
"alg":"HS256",
"typ":"JWT"
},
"id":"f85815ae-69c4-4fec-8553-bc1199e3cdce",
"issuer":"http://localhost:5000/api/",
"payload":{
"sub":"admin@domain",
"jti":"f85815ae-69c4-4fec-8553-bc1199e3cdce",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name":"admin",
"admins":"1",
"superusers":"2",
"users":"3",
"exp":1504392381,
"iss":"http://localhost:5000/api/",
"aud":"http://localhost:5000/api/"
},
"innerToken":null,
"rawAuthenticationTag":null,
"rawCiphertext":null,
"rawData":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbkBkb21haW4iLCJqdGkiOiJmODU4MTVhZS02OWM0LTRmZWMtODU1My1iYzExOTllM2NkY2UiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiYWRtaW4iLCJhZG1pbnMiOiIxIiwic3VwZXJ1c2VycyI6IjIiLCJ1c2VycyI6IjMiLCJleHAiOjE1MDQzOTIzODEsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9hcGkvIiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAwL2FwaS8ifQ.AXpvgAE3ZFN8EnRVSkLUt0iCaFTySFnMTfSx_kWYFDk",
"rawEncryptedKey":null,
"rawInitializationVector":null,
"rawHeader":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
"rawPayload":"eyJzdWIiOiJhZG1pbkBkb21haW4iLCJqdGkiOiJmODU4MTVhZS02OWM0LTRmZWMtODU1My1iYzExOTllM2NkY2UiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiYWRtaW4iLCJhZG1pbnMiOiIxIiwic3VwZXJ1c2VycyI6IjIiLCJ1c2VycyI6IjMiLCJleHAiOjE1MDQzOTIzODEsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9hcGkvIiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAwL2FwaS8ifQ",
"rawSignature":"AXpvgAE3ZFN8EnRVSkLUt0iCaFTySFnMTfSx_kWYFDk",
"securityKey":null,
"signatureAlgorithm":"HS256",
"signingCredentials":null,
"encryptingCredentials":null,
"signingKey":null,
"subject":"admin@domain",
"validFrom":"0001-01-01T00:00:00",
"validTo":"2017-09-02T22:46:21Z"
}
}
العنوان http://localhost/auth متاح لكل من عمليات تسجيل الدخول المستندة إلى ملف تعريف الارتباط و jwt ويجب على المستخدم رؤية الرسالة التالية بعد التنفيذ.
Only authenticated requests receive this message.