Alright! After so many hours I think I somehow reached a conclusion. In the end, if a coworker wants to access a particular report/dashboard that is integrated into a web app using REST APIs (not Power BI Embedded), they need to have a Power BI account (free/pro) AND be part of the company's Azure AD (we already knew this). Free accounts can be assigned by Global Admin role in Azure AD through Office 365 Admin console. You can read the details here. This will eliminate the need of users creating Power BI accounts themselves. Users can view the dashboard through the web app if the particular dashboard is shared with them through Power BI Cloud -> Dashboard -> Share.
Here is a brief walkthrough under the assumption that you already have the web app built and only thing you need is Client ID and Client Secret from the REST API. Here is a C# sample from the Power BI tutorial (This tutorial talks about integrating a report into a web app. I was successful to integrate the whole dashboard. Hence, I am talking about dashboard rather than a report.)
- Create content in Power BI Desktop.
- Publish it to your Power BI Cloud.
- Share the dashboard with people from Power BI Cloud. These users need to be users in Azure AD. Otherwise authentication will fail.
- Register your web app through dev.powerbi.com/apps. Details here. This will give you a Client API and Client Secret.
- Modify web.config of your web app with the Client API and Client Secret you got in the previous step.
- Any user trying to use the web app to view the shared dashboard will need to login with their registered Power BI accounts. For first time users, a password reset will be asked.
This is really the short version. The trick is to add users to Azure AD and make sure you share the relevant dahsboard with them.
The only difference between a user with free account and a pro account is a banner when viewing the report. See screencaps below.
Free account viewing the dashboard.
Pro account viewing the dashboard.
I hope this helps a bit.
Let me know how it goes for you.