|
1 | 1 | # Identity Server 4 Integration
|
2 | 2 |
|
3 |
| -**\*\*IMPORTANT NOTICE\*\*** |
4 |
| -Identity Server 4 maintainance stopped on November 2022, see [official announcement](https://identityserver4.readthedocs.io/en/latest/). Because of that, it is removed from ASP.NET Zero. We suggest migrating to OpenIddict. Check out ASP.NET Zero's [OpenIddict integration document](Infrastructure-Core-Angular-OpenIddict-Integration.md). |
5 |
| - |
6 |
| -[IdentityServer4](http://identityserver.io/) is an OpenID Connect and OAuth 2.0 framework for ASP.NET Core. ASP.NET Zero is integrated to IdentityServer4. It's **disabled by default**. Its located in `*.Web.Host` project. |
| 3 | +[OpenIddict](https://documentation.openiddict.com/) aims at providing a versatile solution to implement OpenID Connect client, server and token validation support in any ASP.NET Core 2.1 (and higher) application. |
7 | 4 |
|
8 | 5 | ## Configuration
|
9 | 6 |
|
10 | 7 | You can enable/disable or configure it from **appsettings.json** file
|
11 | 8 |
|
12 | 9 | ```json
|
13 |
| -"IdentityServer": { |
14 |
| - "IsEnabled": "false", |
15 |
| - "Clients": [ |
16 |
| - { |
17 |
| - "ClientId": "client", |
18 |
| - "AllowedGrantTypes": [ "password" ], |
19 |
| - "ClientSecrets": [ |
20 |
| - { |
21 |
| - "Value": "def2edf7-5d42-4edc-a84a-30136c340e13" |
22 |
| - } |
23 |
| - ], |
24 |
| - "AllowedScopes": [ "default-api" ] |
25 |
| - }, |
26 |
| - { |
27 |
| - "ClientId": "demo", |
28 |
| - "ClientName": "MVC Client Demo", |
29 |
| - "AllowedGrantTypes": [ "hybrid", "client_credentials" ], |
30 |
| - "RequireConsent": "true", |
31 |
| - "ClientSecrets": [ |
32 |
| - { |
33 |
| - "Value": "def2edf7-5d42-4edc-a84a-30136c340e13" |
34 |
| - } |
35 |
| - ], |
36 |
| - "RedirectUris": [ "http://openidclientdemo.com:8001/signin-oidc" ], |
37 |
| - "PostLogoutRedirectUris": [ "http://openidclientdemo.com:8001/signout-callback-oidc" ], |
38 |
| - "AllowedScopes": [ "openid", "profile", "email", "phone", "default-api" ], |
39 |
| - "AllowOfflineAccess": "true" |
40 |
| - } |
41 |
| - ] |
| 10 | +"OpenIddict": { |
| 11 | + "IsEnabled": "true", |
| 12 | + "Applications": [{ |
| 13 | + "ClientId": "client", |
| 14 | + "ClientSecret": "def2edf7-5d42-4edc-a84a-30136c340e13", |
| 15 | + "DisplayName": "AbpZeroTemplate_App", |
| 16 | + "ConsentType": "Explicit", |
| 17 | + "RedirectUris": ["https://oauthdebugger.com/debug"], |
| 18 | + "PostLogoutRedirectUris": [], |
| 19 | + "Scopes": [ |
| 20 | + "default-api", |
| 21 | + "profile" |
| 22 | + ], |
| 23 | + "Permissions": [ |
| 24 | + "ept:token", |
| 25 | + "ept:authorization", |
| 26 | + "gt:password", |
| 27 | + "gt:client_credentials", |
| 28 | + "gt:authorization_code", |
| 29 | + "rst:code", |
| 30 | + "rst:code id_token" |
| 31 | + ] |
| 32 | + }] |
42 | 33 | }
|
43 | 34 | ```
|
44 | 35 |
|
45 |
| -## Testing with Client |
| 36 | +* **IsEnabled**: Indicates if OpenIddict integration is enabled or not. |
| 37 | +* **Applications**: List of OpenIddict applications. |
| 38 | + * **ClientId**: The client identifier associated with the current application. |
| 39 | + * **ClientSecret**: The client secret associated with the current application. |
| 40 | + * **DisplayName**: The display name associated with the current application. |
| 41 | + * **ConsentType**: The consent type associated with the current application (see [possible values](https://github.com/openiddict/openiddict-core/blob/dev/src/OpenIddict.Abstractions/OpenIddictConstants.cs#L178)). |
| 42 | + * **RedirectUris**: The callback URLs associated with the current application, serialized as a JSON array. |
| 43 | + * **PostLogoutRedirectUris**: The logout callback URLs associated with the current application, serialized as a JSON array. |
| 44 | + * **Scopes**: The scopes associated with the current authorization, serialized as a JSON array (see [possible values](https://github.com/openiddict/openiddict-core/blob/dev/src/OpenIddict.Abstractions/OpenIddictConstants.cs#L402). You can also use custom values). |
| 45 | + * **Permissions**: The permissions associated with the current application, serialized as a JSON array (see [possible values](https://github.com/openiddict/openiddict-core/blob/dev/src/OpenIddict.Abstractions/OpenIddictConstants.cs#L360)). |
46 | 46 |
|
47 |
| -ASP.NET Zero solution has a sample console application (ConsoleApiClient) that can connects to the application, authenticates through IdentityServer4 and calls an API. |
| 47 | +## Testing with Client |
48 | 48 |
|
| 49 | +ASP.NET Zero solution has a sample console application (ConsoleApiClient) that can connects to the application, authenticates through OpenIddict and calls an API. |
49 | 50 |
|
50 | 51 |
|
51 |
| -## Testing with MVC Client |
| 52 | +## Testing with Web Client |
52 | 53 |
|
53 |
| -You can use [aspnet-zero-samples](https://github.com/aspnetzero/aspnet-zero-samples) -> `IdentityServerClient` project to test identity server with MVC client. |
| 54 | +You can use [https://oauthdebugger.com/](https://oauthdebugger.com/) website to test openIddict with a web client. |
54 | 55 |
|
55 |
| -Add a new client to `*.Web.Host` appsettings.json |
| 56 | +Add a new Application to `*.Web.Host` appsettings.json |
56 | 57 |
|
57 | 58 | ```json
|
58 | 59 | ...
|
59 |
| - { |
60 |
| - "ClientId": "mvcdemo", |
61 |
| - "ClientName": "MVC Client Demo 2", |
62 |
| - "AllowedGrantTypes": [ "implicit", "client_credentials" ], |
63 |
| - "RequireConsent": "true", |
64 |
| - "ClientSecrets": [ |
65 |
| - { |
66 |
| - "Value": "mysecret" |
67 |
| - } |
68 |
| - ], |
69 |
| - "RedirectUris": [ "http://localhost:62964/signin-oidc" ], |
70 |
| - "PostLogoutRedirectUris": [ "http://localhost:62964/signout-callback-oidc" ], |
71 |
| - "AllowedScopes": [ "openid", "profile", "email", "phone", "default-api" ], |
72 |
| - "AllowOfflineAccess": "true" |
73 |
| - } |
74 |
| -... |
75 |
| -``` |
76 |
| - |
77 |
| -Download the `IdentityServerClient` project and open it's `Startup.cs` and modify `AddOpenIdConnect` area as seen below |
78 |
| - |
79 |
| -```csharp |
80 |
| -... |
81 |
| -.AddOpenIdConnect("oidc", options => |
82 | 60 | {
|
83 |
| - options.SignInScheme = "Cookies"; |
84 |
| - |
85 |
| - options.Authority = "https://localhost:44301";//change with your project url |
86 |
| - options.RequireHttpsMetadata = false; |
87 |
| - |
88 |
| - options.ClientId = "mvcdemo"; |
89 |
| - options.ClientSecret = "mysecret"; |
90 |
| - |
91 |
| - options.SaveTokens = true; |
92 |
| -}); |
| 61 | + "ClientId": "client", |
| 62 | + "ClientSecret": "def2edf7-5d42-4edc-a84a-30136c340e13", |
| 63 | + "DisplayName": "AbpZeroTemplate_App", |
| 64 | + "ConsentType": "Explicit", |
| 65 | + "RedirectUris": ["https://oauthdebugger.com/debug"], |
| 66 | + "PostLogoutRedirectUris": [], |
| 67 | + "Scopes": [ |
| 68 | + "default-api", |
| 69 | + "profile" |
| 70 | + ], |
| 71 | + "Permissions": [ |
| 72 | + "ept:token", |
| 73 | + "ept:authorization", |
| 74 | + "gt:password", |
| 75 | + "gt:client_credentials", |
| 76 | + "gt:authorization_code", |
| 77 | + "rst:code", |
| 78 | + "rst:code id_token" |
| 79 | + ] |
| 80 | +} |
93 | 81 | ...
|
94 | 82 | ```
|
95 | 83 |
|
| 84 | +Then, go to [https://oauthdebugger.com/](https://oauthdebugger.com/) and create a URL for authorization code flow. A sample URL should be something like this; |
| 85 | + |
| 86 | +```bash |
| 87 | +https://localhost:44301/connect/authorize |
| 88 | +?client_id=client |
| 89 | +&redirect_uri=https://oauthdebugger.com/debug |
| 90 | +&scope=default-api |
| 91 | +&response_type=code |
| 92 | +&response_mode=query |
| 93 | +&state=krd0ddufuw |
| 94 | +&nonce=fbhw5it86l6 |
| 95 | +``` |
96 | 96 |
|
| 97 | +Visit this URL using a browser. If you are not logged into your ASP.NET Zero application, you will be redirected to Login page. If you are already logged in, you will be redirected back to [https://oauthdebugger.com/](https://oauthdebugger.com/). Here, you will see the result of the request as shown below; |
97 | 98 |
|
98 |
| -That is all. Now you can test it. |
99 |
| - |
100 |
| -Run both projects. Go to `IdentityServerClient` project's secure. <img src="images/identity-server-4-test-mvc-secure.png"> |
101 |
| - |
102 |
| -It will redirect you to the login page. |
| 99 | + |
103 | 100 |
|
104 |
| -<img src="images/identity-server-4-test-host-login.png"> |
| 101 | +You can use this code to request an access token. You need to send a request to [https://localhost:44301/connect/token](https://localhost:44301/connect/token) endpoint. Here is a sample request using Postman. |
105 | 102 |
|
106 |
| -After you successfully login, you will see the consent page. <img src="images/identity-server-4-test-host-consent.png"> |
| 103 | + |
107 | 104 |
|
108 |
| -After you allow consents, you will redirect to the secure page and get user claims. <img src="images/identity-server-4-test-mvc-secure-after-login.png"> |
| 105 | +Using this token, you can get details of the user using [https://localhost:44301/connect/userinfo](https://localhost:44301/connect/userinfo) endpoint or you can make a request to any ASP.NET Zero API service (for example [https://localhost:44301/api/services/app/User/GetUsers](https://localhost:44301/api/services/app/User/GetUsers)). |
109 | 106 |
|
110 | 107 | ## OpenId Connect Integration
|
111 | 108 |
|
112 |
| -Once IdentityServer4 integration is enabled Web.Mvc application becomes an OpenId Connect server. That means another web application can use standard OpenId Connect protocol to authenticate users with your |
| 109 | +Once OpenIddict integration is enabled, Web.Host application becomes an OpenId Connect server. That means another web application can use standard OpenId Connect protocol to authenticate users with your |
113 | 110 | application and get permission to share their information (a.k.a. consent screen).
|
114 | 111 |
|
115 | 112 | ## More
|
116 | 113 |
|
117 |
| -See [IdentityServer4's own documentation](http://docs.identityserver.io/en/latest/) to understand and configure IdentityServer4. |
| 114 | +See [OpenIddict's own documentation](https://documentation.openiddict.com/) to understand and configure OpenIddict. |
0 commit comments